Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yuzd/canalsync
canal middleware for netcore
https://github.com/yuzd/canalsync
canal canal-server dbsync rabbitmq redis
Last synced: about 1 month ago
JSON representation
canal middleware for netcore
- Host: GitHub
- URL: https://github.com/yuzd/canalsync
- Owner: yuzd
- License: apache-2.0
- Created: 2019-04-14T06:17:32.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-08-29T08:25:38.000Z (about 2 years ago)
- Last Synced: 2024-09-30T23:23:33.397Z (about 2 months ago)
- Topics: canal, canal-server, dbsync, rabbitmq, redis
- Language: C#
- Homepage:
- Size: 646 KB
- Stars: 23
- Watchers: 4
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CanalSync
canal 是阿里巴巴开源的一款基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。
我开发的这个CanalSync项目是基于canal-server之上的数据库同步&消费中间件,用于可快速搭建消费canal-server的项目。
目前我已实现并开源了如下:1. 数据消费传输到redis组件
2. 数据消费传输到rabbitmq组件
3. 数据消费传输到mysql数据库组件# 示意图
![image](https://images4.c-ctrip.com/target/zb0215000000y2ok436F1.png)
## Nuget:
### 1. 接收canal-server的消息中间件:
Install-Package Canal.Server### 2. 解析canal-server消息转出可执行sql的中间件:
Install-Package Canal.SqlParse## 如何使用
如果你需要写一个数据消费传输到XXXMQ,用不到反解析成sql的话,只需要引用 Canal.Server中间件。
如果你需要写一个数据消费传输到XXXdb,得用到反解析sql中间件,需要同时引用Canal.Server 和 Canal.SqlParse 这2个中间件。## Canal.Server 如何使用
1. 引用 Canal.Server 并appsettings.json 配置canal-server的参数.如下图:![image](https://images4.c-ctrip.com/target/zb0715000000ycatg5F47.png)
参数说明:
![image](https://images4.c-ctrip.com/target/zb0t15000000xvnx4D8F2.png)2. 创建一个 消费类 必须要 实现: INotificationHandler 接口,例如叫TestHandler
```
public class TestHandler:INotificationHandler{
public Task Handle(CanalBody notification)
{
//写消费逻辑return Task.CompletedTask;;
}
}
```
3. 在startUp 使用并注册 该消费类
```
//注册了之后 canal-server有新的消息就会进入到TestHandler的Handle方法
services.AddCanalService(produce => produce.RegisterSingleton());
```## Canal.SqlParse 如何使用
目前只实现了解析mysql的逻辑,未来会加入sqlserver的解析逻辑!!```
//注册使用 connectionString是mysql的数据库连接字符串
services.AddMysqlParseService(connectionString);
// 计划中还未实现
//services.AddSqlserverParseService(connectionString);
```
在类的构造方法可注入:![image](https://images4.c-ctrip.com/target/zb0d15000000xu5pq07B3.png)
如上图,代表将canal-server的数据直接在另外的mysql库里面执行,等于2个mysql数据进行互相同步。
## 欧洲与中国的2个mysql库 使用上述方法进行同步的测试
**结果: 同步速度在100~200qps**
![image](https://images4.c-ctrip.com/target/zb0u15000000xvmizF51C.png)## TODO
消费端改成用air2来拉取