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

前言:如何保证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_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连接配置

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;

}

猜你喜欢

转载自blog.csdn.net/weixin_38982591/article/details/124099984