赞
踩
前言:如何保证redis与mysql数据一致性呢? 网上大部份答案都是延迟双删, 现在我就将另外一个解方案分享给大家,我自己也在最近项目中应有上来了。
1、开启 biglog 日志 (根据自己mysql配置文件位置更改)
vim /etc/my.cnf
添加配置
- [mysqld]
- log-bin=mysql-bin # 开启binlog
- binlog-format=ROW # 选择ROW模式
- server_id=1 # 配置MySQL replaction需要定义,不和Canal的slaveId重复即可
2、重启MySQL ,查看配置是否生效
show variables like 'log_bin';
3. RabbitMQ 队列创建
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连接配置
- spring:
- rabbitmq:
- host: ip
- port: 端口
- username: 用户名
- password: 密码
RabbitMQ 监听同步缓存
返回json映射bean类 CanalMessage
-
- /**
- * @author yueF_L
- * @version 1.0
- * @date 2022-04-10 0:30
- * Canal消息接收实体类
- */
- @NoArgsConstructor
- @Data
- public class CanalMessage<T> {
- @JsonProperty("type")
- private String type;
-
- @JsonProperty("table")
- private String table;
-
- @JsonProperty("data")
- private List<T> data;
-
- @JsonProperty("database")
- private String database;
-
- @JsonProperty("es")
- private Long es;
-
- @JsonProperty("id")
- private Integer id;
-
- @JsonProperty("isDdl")
- private Boolean isDdl;
-
- @JsonProperty("old")
- private List<T> old;
-
- @JsonProperty("pkNames")
- private List<String> pkNames;
-
- @JsonProperty("sql")
- private String sql;
-
- @JsonProperty("ts")
- private Long ts;
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。