一,背景
在整合canal和Spring时,本地使用canal的subscribe方法订阅了需要监听的表,但是获得只有transactionbegin和transactionend两种eventType的日志, 没有rowdata类型的日志,导致无法完成监听数据库数据更新的需求。
二,解决问题
1,分析
只能接收到TRANSACTIONBEGIN和TRANSACTIONEND日志,收不到ROWDATA类型数据,所以问题还是出在正则表达式身上。
常见例子:
1. 所有表:.* or .*\\..*
2. canal schema下所有表: canal\\..*
3. canal下的以canal打头的表:canal\\.canal.*
4. canal schema下的一张表:canal\\.test1
5. 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
我们在覆盖客户端的订阅的时候,他在有的Issue上或者很多博客中也有回复使用.*\\..*会覆盖服务端配置,这样确实会,但是这样会所有的表都不能匹配到该正则上。
2,修改
我这边是用了nacos,subscribe方法的参数如下
3,看canal的instance里日志
4,重启本地spring项目,在数据库端修改之后,可以看到已经可以拿到rowdata的数据了