当前位置:   article > 正文

Canal 实战 | SpringBoot 整合 Canal + RabbitMQ 实现监听 MySQL 数据库同步更新 Redis 缓存

Canal 实战 | SpringBoot 整合 Canal + RabbitMQ 实现监听 MySQL 数据库同步更新 Redis 缓存

前言:如何保证redis与mysql数据一致性呢? 网上大部份答案都是延迟双删, 现在我就将另外一个解方案分享给大家,我自己也在最近项目中应有上来了。

1、开启 biglog 日志 (根据自己mysql配置文件位置更改)

vim /etc/my.cnf

添加配置

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

2、重启MySQL ,查看配置是否生效

show variables like 'log_bin';

 3. RabbitMQ 队列创建 

  • 添加交换机 canal_exchange

  • 添加队列 canal_queue

  • 队列绑定交换机

4. Canal 配置和启动

Canal Server下载

进入下载地址,选择 canal.deployer-1.1.5.tar.gz

Canal Server配置

需要配置的东西就两项,一个是监听数据库配置,另一个是 RabbitMQ 连接配置。

改动的两个文件分别是 Canal 配置文件 canal.properties 和 实例配置文件 instance.properties

㊙️:一个 Server 可以配置多个实例监听 ,Canal 功能默认自带的有个 example 实例,本篇就用 example 实例 。如果增加实例,复制 example 文件夹内容到同级目录下,然后在 canal.properties 指定添加实例的名称。

解压出来的目录信息:

canal.properties

配置 Canal 服务方式为 RabbitMQ 和连接配置

进入到conf文件,打开canal.properties

把原理tcp模式改成rabbitMQ

 

到这里我们将canal连接rabbitMQ配置完成

instance.properties

监听数据库配置

cd /example 目录下

 

 5. SpringBoot 整合 Canal + RabbitMQ

引入maven依赖

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

RabbitMQ连接配置

  1. spring:
  2. rabbitmq:
  3. host: ip
  4. port: 端口
  5. username: 用户名
  6. password: 密码

RabbitMQ 监听同步缓存

 返回json映射bean类 CanalMessage

  1. /**
  2. * @author yueF_L
  3. * @version 1.0
  4. * @date 2022-04-10 0:30
  5. * Canal消息接收实体类
  6. */
  7. @NoArgsConstructor
  8. @Data
  9. public class CanalMessage<T> {
  10. @JsonProperty("type")
  11. private String type;
  12. @JsonProperty("table")
  13. private String table;
  14. @JsonProperty("data")
  15. private List<T> data;
  16. @JsonProperty("database")
  17. private String database;
  18. @JsonProperty("es")
  19. private Long es;
  20. @JsonProperty("id")
  21. private Integer id;
  22. @JsonProperty("isDdl")
  23. private Boolean isDdl;
  24. @JsonProperty("old")
  25. private List<T> old;
  26. @JsonProperty("pkNames")
  27. private List<String> pkNames;
  28. @JsonProperty("sql")
  29. private String sql;
  30. @JsonProperty("ts")
  31. private Long ts;
  32. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/430595
推荐阅读
相关标签
  

闽ICP备14008679号