SpringBoot+Canal+RabbitMQ实战

这篇具有很好参考价值的文章主要介绍了SpringBoot+Canal+RabbitMQ实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Canal简介

https://github.com/alibaba/canal

1.1 Canal工作原理

MySQL主备复制原理
SpringBoot+Canal+RabbitMQ实战

  • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log
    events,可以通过 show binlog events 进行查看)
  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
  • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

canal 工作原理

  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump
    协议
  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  • canal 解析 binary log 对象(原始为 byte 流)

2. 启动Canal

前提是mysql、rabbitmq已经安装完成

2.1 打开mysql的binlog,修改my.cnf
[mysqld]
log-bin=mysql-bin #开启binlog
binlog-format=ROW #选择ROW模式
server_id=1 # 配置MySQL replaction需要定义,不和Canal的slaveId重复即可

查看是否生效:

show variables like 'log_bin';

SpringBoot+Canal+RabbitMQ实战

2.2 下载canal.deployer

https://github.com/alibaba/canal/releases/download/canal-1.1.6/canal.deployer-1.1.6.tar.gz

下载完之后解压压缩文件,进入canal.deployer-1.1.6之后可以看到:
SpringBoot+Canal+RabbitMQ实战

2.2.1 进入\canal.deployer-1.1.6\config目录:编辑canal.properties文件

配置 Canal 服务方式为 RabbitMQ 和连接配置(🏷 只列出需要修改的地方)

# tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ
canal.serverMode = rabbitMQ

##################################################
######### 		    RabbitMQ	     #############
##################################################
rabbitmq.host = 192.168.0.181
rabbitmq.virtual.host = /test
rabbitmq.exchange = canal.exchange
rabbitmq.username = user123
rabbitmq.password = pass123
rabbitmq.deliveryMode =

填写自己RabbitMQ的地址以及用户名密码和虚拟机即可.

2.2.2 进入\canal.deployer-1.1.6\config\example目录:编辑instance.properties文件

(1)配置mysql的连接地址和正在使用的bin-log文件以及偏移量

# position info
canal.instance.master.address=192.168.0.80:3306
canal.instance.master.journal.name=mysql-bin.000988
canal.instance.master.position=446897591
canal.instance.master.timestamp=
canal.instance.master.gtid=

查看bin-log文件可使用以下命令查看

# 查看正在使用的二进制日志文件和对应的偏移量
SHOW MASTER STATUS;

# 查看所有的二进制日志文件和对应文件的大小
SHOW BINARY LOGS;

SpringBoot+Canal+RabbitMQ实战
(2)配置要监听的数据库

Canal的订阅规则是通过正则表达式来进行匹配的。具体来说,订阅规则由三个部分组成:数据库名、表名和操作类型,使用“.”分隔。
例如,订阅规则“testdb.test_table.*”表示订阅testdb数据库中名为test_table的表的所有操作类型。

test\\…*表示监听test.开头数据库下所有的表的所有操作

ps:test\\.(student|stu)表示匹配test库下的student和stu表

# table regex
# 监听的
canal.instance.filter.regex=test\\..*
# table black regex
# 不监听的
canal.instance.filter.black.regex=xxl_job\\..*

当然这里配置完毕之后可能会不生效,所以我们要进入\canal.deployer-1.1.6\config目录:编辑canal.properties文件

# binlog filter config
canal.instance.filter.query.dml = true
2.3 启动

在启动之前将canal.deployer-1.1.6\plugin中的jar包拷贝到 canal.deployer-1.1.6\lib目录下;否则启动会报错,因为我们使用了mq,但是在lib目录下没有相关mq的jar。
SpringBoot+Canal+RabbitMQ实战
进入\canal.deployer-1.1.6\bin目录双击startup.bat即可,
或者在此目录下cmd命令:startup.bat pause

不加pause也可,加上只是防止窗口闪退

SpringBoot+Canal+RabbitMQ实战

3. 创建SpringBoot项目

3.1添加依赖:
<dependencies>
        <dependency>
            <groupId>com.alibaba.otter</groupId>
            <artifactId>canal.client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
    </dependencies>

canal版本使用Canal服务相同版本,即1.1.6

3.2编写yml配置
spring:
  rabbitmq:
    addresses: 192.168.0.181:5672
    username: user123
    password: pass123
    virtual-host: /test
    listener:
      simple:
        acknowledge-mode: auto
      direct:
        acknowledge-mode: auto
3.3编写RabbitMQ Listener:
@Component
public class CanalListener {

    private final static Logger logger = LoggerFactory.getLogger(CanalListener.class);

    @RabbitListener(bindings = @QueueBinding(
            exchange = @Exchange(value = "canal.exchange"),
            value = @Queue(value = "canal_queue"), key = "canal_routing_key"))
    public void receiveMessage(Message message) {
        logger.debug("receive canal message:{}", message);
        MessageProperties messageProperties = message.getMessageProperties();
        String body = new String(message.getBody());
        logger.info("messageProperties:{}", messageProperties);
        logger.info("body:{}", body);
    }

}

其中的交换机、队列、路由key都是上面配置文件配置中一样的。

3.4 效果

执行如下sql之后:

UPDATE `student` SET `del_flag` = 0;

SpringBoot+Canal+RabbitMQ实战
其中body结构大致如下:
SpringBoot+Canal+RabbitMQ实战
表结构:
SpringBoot+Canal+RabbitMQ实战文章来源地址https://www.toymoban.com/news/detail-438410.html

到了这里,关于SpringBoot+Canal+RabbitMQ实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【RabbitMQ实战】 03 SpringBoot RabbitMQ生产者和消费者示例

    上一节我们写了一段原生API来进行生产和消费的例子。实际上SpringBoot对原生RabbitMQ客户端做了二次封装,让我们使用API的代价更低。 依赖引入 RabbitMQ的配置如下 每个配置的具体含义,详见配置 代码说明 使用RabbitTemplate可以发送消息 这个Controller定义了一个发送的接口,调用

    2024年02月07日
    浏览(32)
  • RabbitMQ+SpringBoot企业版队列实战------【华为云版】

    安装Erlang 官网提示:https://www.erlang-solutions.com/resources/download.html 检测erlang 安装RabbitMQ  文件下载 官网下载地址:

    2024年02月07日
    浏览(26)
  • Springboot实战16 消息驱动:如何使用 RabbitTemplate 集成 RabbitMQ?

    15 讲我们介绍了基于 ActiveMQ 和 JmsTemplate 实现消息发送和消费,并重构了 SpringCSS 案例系统中的 account-service 和 customer-service 服务。 今天,我们将介绍另一款主流的消息中间件 RabbitMQ,并基于 RabbitTemplate 模板工具类为 SpringCSS 案例添加对应的消息通信机制。 AMQP 规范与 RabbitM

    2024年02月02日
    浏览(37)
  • RabbitMq整合Springboot超全实战案例+图文演示+源码自取

    目录 介绍 简单整合 简单模式 定义 代码示例  work模式 定义 代码示例 pubsub模式 定义 代码示例 routing模式  定义 代码示例  top模式 定义 代码 下单付款加积分示例 介绍 代码  可靠性投递示例 介绍 代码 交换机投递确认回调  队列投递确认回调  ​延迟消息场景示例 介绍 代

    2024年02月03日
    浏览(34)
  • Canal同步Mysql实时操作日志至RabbitMQ,并实现监听及解析处理

    关于Canal的介绍及原理不在此赘述,可自行查阅。笔者在使用Canal同步Mysql实时操作记录至RabbitMQ的过程中,也翻阅了一些大牛们的文章,可能是我使用的Canal版本与文中版本不一致,出现了一些问题,在此总结记录一下可行的方案。 注:本文使用的Canal为 v1.1.7 先查看目标数据

    2024年04月10日
    浏览(33)
  • SpringBoot实战项目整合RabbitMQ+ElaticSearch实现SKU上下架功能

    😊 @ 作者: Eric 💖 @ 主页: https://blog.csdn.net/weixin_47316183?type=blog 🎉 @ 主题: SpringBoot实战项目整合RabbitMQ+ElaticSearch实现SKU上下架功能 ⏱️ @ 创作时间: 2023年07月03日 最终实现效果:针对SKU的上下架 上架效果: 1、后台选择 SKU ,点击上架,该 SKU 修改为 上架 状态 2、同时向

    2024年02月11日
    浏览(32)
  • 15年大牛用140多个实战案例深入讲解Java微服务架构实战:SpringBoot +SpringCloud +Docker +RabbitMQ

    第一部分,springboot篇; 第1章SpringBoot编程起步; 1.SpringBoot提倡的是一种简洁的开发模式,可保证用户不被大量的配置文件和依赖关系所困扰。 2.SpringBoot开发需要Maven或 Gradle构建工具支持。 3.SpringBoot使用一系列的注解来简化开发过程。 第2章SpringBoot程序开发; 1. SpringBoot的依赖

    2024年04月09日
    浏览(40)
  • SpringBoot整合Canal实现数据同步到ElasticSearch

    canal 译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费,canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据。 canal原理就是伪装成mysql的从节点,从而订阅master节点的binlog日志 Canal原理: canal模拟mysql slave的交

    2024年02月06日
    浏览(37)
  • docker安装canal入门实战,同步mysql数据到elasticsearch

    官方docker安装说明文档:https://github.com/alibaba/canal/wiki/Docker-QuickStart canal.adapter canal 1.1.1版本之后, 增加客户端数据落地的适配及启动功能, 目前支持功能: 客户端启动器 同步管理REST接口 日志适配器, 作为DEMO 关系型数据库的数据同步(表对表同步), ETL功能 HBase的数据同步(表对表

    2024年02月04日
    浏览(34)
  • SpringBoot快速整合canal1.1.5(TCP模式)

    SpringBoot快速整合canal1.1.5(TCP模式) 安装并配置MySQL主从⭐ 1:Docker安装MySQL8.0.28 2:创建目录: 3:编写my.cnf文件: 内容如下:(注意:把binlog-do-db的值修改成你需要canal监听的数据库名称,如果需要监听多个数据库,一定要在下面写多个binlog-do-db,而不是用“,”分隔) 4:启

    2024年02月06日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包