自定義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

相關文章
相關標籤/搜索