自定义spring schema简化与canal集成

canal是阿里巴巴团队基于数据库日志增量订阅&消费的框架,项目中咱们常用Spring来集成管理其它框架,本文讲述自定义spring xsd schema的方式配置集成canal到Spring容器.java

项目地址:http://git.oschina.net/damivip/spring-xsd-canalgit

使用canal能够清楚的知道数据库记录的IUD的具体内容。spring

  • 新增:可解析出新增数据的字段和内容数据库

  • 删除:可解析出删除数据的行全部内容服务器

  • 更新:可解析出更新记录先后的字段内容,和更新的字段是哪些app


1.应用场景:

B2C网站更新订单(用户下单/退单),订单业务相关的其余非实时服务须要被通知。框架

常规方式是B2C使用消息中间件通知其余服务,当DBA因特殊状况直接更改数据库数据时,其余服务就没法获得此消息,而使用canal能知道全部来自数据库的更改,无需其余服务通知,彻底的业务解耦。socket


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 可选:fetch

  • 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

相关文章
相关标签/搜索