canal是阿里巴巴团队基于数据库日志增量订阅&消费的框架,项目中我们经常使用Spring来集成管理其它框架,本文讲述自定义spring xsd schema的方式配置集成canal到Spring容器.
项目地址:http://git.oschina.net/damivip/spring-xsd-canal
使用canal可以清楚的知道数据库记录的IUD的具体内容。
- 新增:可解析出新增数据的字段和内容
- 删除:可解析出删除数据的行所有内容
- 更新:可解析出更新记录前后的字段内容,和更新的字段是哪些
1.应用场景:
B2C网站更新订单(用户下单/退单),订单业务相关的其他非实时服务需要被通知。
常规方式是B2C使用消息中间件通知其他服务,当DBA因特殊情况直接更改数据库数据时,其他服务就无法得到此消息,而使用canal能知道所有来自数据库的更改,无需其他服务通知,完全的业务解耦。
2.配置预览
自己写了一个简单的spring xsd schema,简化canal配置,如下:
<config:canal-config id="singleCanalClient" destination="example" fetchSize="1" host="localhost:2181,localhost:2182,localhost:2183" hostType="zkCluster"> <!-- 处理所有库表IUD--> <config:globalInvoke value="globalCanalInvoke"/> <config:tableInvoke> <!-- 指定数据库database表tableName 暂不支持通配符方式--> <config:invoke database="test" tableName="user"> <config:bean ref="globalCanalInvoke"/> </config:invoke> </config:tableInvoke> </config:canal-config>
hostType 可选:
- socketCluster:socket集群方式
- zkCluster:zookeeper集群方式
- single:但服务器方
destination字段对应canal服务配置中的instance名字;
fetchSize 表示尝试拿记录条数
globalInvoke 所有数据库表IDU操作时,执行globalInvoke制定的javaBean方法
tableInvoke 制定数据库和表执行IDU操作时,调用特定javaBean的方法
3. 测试用例
@Test public void testStartClient() throws Exception { String xml = "classpath:conf/applicationContext.xml"; ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { xml }); System.out.println(context.getBean("singleCanalClient")); System.in.read(); }
详细内容参考:http://git.oschina.net/damivip/spring-xsd-canal
时间: 2024-10-13 11:35:04