# db-subscriber **Repository Path**: dunang/db-subscriber ## Basic Information - **Project Name**: db-subscriber - **Description**: 数据库订阅中间件,当订阅的数据库/表发生数据改变时,主动推送消息给业务端或者直接实现对缓存的更新,数据同步,es同步等等场景。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2020-07-23 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # db-subscriber #### 介绍 数据库订阅中间件,当订阅的数据库/表发生数据改变时,主动推送消息给业务端或者直接实现业务需求。 主要使用场景: 1. 对缓存的更新。 2. 数据同步。 3. es数据同步。 #### 软件架构 canal + spring boot + spring event + 责任链模式。 #### 安装教程 1. 安装Canal Server,参考https://github.com/alibaba/canal/wiki/QuickStart。 2. 更改application.yml配置文件并打包db-subscriber,运行jar包。 #### 使用说明 1. 目前整个项目采用单线程来获取Canal Event,如果对订阅内容的顺序不敏感,可以使用注解“@Async”开启异步。 2. 修改配置文件application.yml ``` canal: server: # canal server的地址 ip: 127.0.0.1 port: 11111 # 订阅galen数据库所有的表,格式{database}.{table} subscribe: gelen\..* ``` 3. 自定义订阅类: 添加订阅类(XXXCanalFilter)实现CanalFilter接口和Ordered/PriorityOrdered接口,Override filter(CanalExchange exchange, CanalFilterChain chain)方法,其中exchange保存了库表信息以及发生更新的数据。可以根据实际情况自定义获取并作定制化处理。实例代码: ``` @Data @Slf4j @Component public class GalenTablesCanalFilter implements CanalFilter, Ordered { @Override public Result filter(CanalExchange exchange, CanalFilterChain chain) { if (exchange.getDatabase().equals("galen") && exchange.getTableName().equals("galen") { log.info("DB: {}, Table: {}, Method: {}, Update Columns: {}, Before Data: {}, After Data: {}", exchange.getDatabase(), exchange.getTableName(), exchange.getEventType(), exchange.getUpdateColumns(), exchange.getBeforeColumns(), exchange.getAfterColumns()); // 订阅galen库表的变化,业务逻辑在这写,比如当数据更新时,通过exchange获取到最新的数据并更新缓存。 } return chain.filter(exchange); } @Override public int getOrder() { return 0; } } ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)