文档章节

自定义spring schema简化与canal集成

大米被占用
 大米被占用
发布于 2015/01/27 17:44
字数 566
阅读 1598
收藏 17

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

© 著作权归作者所有

共有 人打赏支持
大米被占用
粉丝 19
博文 6
码字总数 4272
作品 0
东城
程序员
私信 提问
加载中

评论(1)

steveJox
steveJox
请教一个问题,使用自定义标签,通过spring的propertyplaceholderconfigurer这个不能入住值${canal.username},这种方式不能注入值!应该怎么处理。
maxwell的使用--日志增量订阅&消费

1、maxwell原理和使用场景 发送MySQL binlog到Hadoop(kafka+flume) 当前场景:从mysql实时拉取修改和增量数据 2、maxwell的优缺点 3、maxwell的搭建 4、maxwel的使用步骤 5、和canal相比 ma...

_小茗同学_
2018/02/08
2
0
canal源码分析——项目组成结构

背景 canal项目的介绍及源码请到项目主页:https://github.com/alibaba/canal 去查看。 项目结构初探 下载源码后,我们打开目录看到的是如下一个目录结构。 可以看出canal是一个基于maven构建...

杨武兵
2016/03/15
1K
3
由 Canal 组件分析集成中间件架构的一般过程

由Canal组件分析集成中间件架构的一般过程 数据同步背景 为什么要做数据同步?因为数据很多,还要共享或做它用。举个栗子,你从移动硬盘拷贝一份小小电影到你的Macbook上赏析,也叫。但系统不...

Java大蜗牛
2018/08/10
0
0
k8s与各网络插件集成(flannel calico canal kube-router romana cni-genie)

通用说明 如果多次换不同网络插件实验,每次实验前先把目录下文件清空 flannel calico 1.配置启动etcd集群 2.配置启动calico 3.参考文档 https://docs.projectcalico.org/v3.1/getting-star...

店家小二
2018/12/17
0
0
【转】微服务MySQL分库分表数据到MongoDB同步方案

需求背景 近年来, 微服务 概念持续火热,网络上针对微服务和单体架构的讨论也是越来越多,面对日益增长的业务需求是,很多公司做技术架构升级时优先选用微服务方式。我所在公司也是选的这个...

小红牛
2017/11/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

万能的Python,还能用来制作高大上的进度条?

对于开发或者运维来说,使用Python去完成一些跑批任务,或者做一些监控事件是非常正常的情况。那么如何有效的监控任务的进度,除了在任务中加上log外,还能不能有另一种方式来了解任务进展到...

上海小胖
31分钟前
2
0
如何嵌入 HTML 到 iPython notebook的输出

如何嵌入 HTML 到 iPython notebook的输出 iPython notebook中可以嵌入 HTML,也适用于JupyterHub和JupyterLab环境。不仅可以显示常用的HTML标签文本,甚至可以嵌入脚本交互操作和Frame分隔框...

openthings
58分钟前
1
0
四、RabbitMQ3.7在CentOS7下的安装

安装依赖 sudo yum install -y gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git 创建yum源 vi /etc/yum.repos.d/rabbitmq-erlang.repo [......

XuePeng77
今天
2
0
android 延长Toast的时长

示例:myToast(5000,"hello"); public void myToast(int showTime, String msg) { Toast hello = Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT); new CountDownTimer(......

雨焰
昨天
4
0
浅谈mybatis的日志适配模式

Java开发中经常用到的日志框架有很多,Log4j、Log4j2、slf4j等等,Mybatis定义了一套统一的日志接口供上层使用,并为上述常用的日志框架提供了相应的适配器。有关适配器模式例子可以参考 设计...

算法之名
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部