canal整合rabbitmq实现redis和mysql数据一致

前言:

因为网上rabbitmq整合canal的教程较少,几乎没有,所以我自己摸索了一下,并成功整合,并分享一下详细步骤,期间遇到的bug蛮多的。

第一步,安装mysql并编写配置

安装完创建好用户之后,在my.cnf文件中添加以下配置:

[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server_id=1

在数据库下执行以下语句可查询是否开启:

SHOW VARIABLES LIKE 'binlog_format';
SHOW VARIABLES LIKE 'log_bin';

第二步,安装canal并编写配置

1、修改conf目录下的canal.properties
canal.serverMode = rabbitMQ
​
rabbitmq.host = 127.0.0.1
rabbitmq.virtual.host = /
​
# rabbitmq中新建的 Exchange
rabbitmq.exchange = canal_exchange
rabbitmq.username = guest
rabbitmq.password = guest
​
2、修改conf/example下的instance.properties
canal.instance.master.address=127.0.0.1:3306
# mysql中配置的用于同步的canal用户
canal.instance.dbUsername=root
canal.instance.dbPassword=123456
# rabbitmq中配置的 绑定的 routingkey
canal.mq.topic=canal_key
第三步、安装rabbitmq并用创建交换机及队列

这里我们直接用java代码,执行程序之前会自动创建exchange和queue并绑定它们

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
​
@Configuration
public class CanalConfig {
​
    @Bean
    Queue queue(){
        return  new Queue("canal_queue");
    }
​
    @Bean
    DirectExchange directExchange(){
        return new DirectExchange("canal_exchange01");
    }
​
    @Bean
    Binding binding(){
        return BindingBuilder.bind(queue()).to(directExchange()).with("canal_key");
    }
}
​
第四步、创建boot项目并添加依赖
       <!--canal依赖-->
        <dependency>
            <groupId>com.alibaba.otter</groupId>
            <artifactId>canal.client</artifactId>
            <version>1.1.6</version>
        </dependency>
        <!--rabbitmq依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency> 
第五步、编写rabbitmq监听器
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.stereotype.Component;
​
/**
 * Canal消息消费者
 */
@Component
public class CanalComsumer {
​
        @RabbitHandler
        @RabbitListener(bindings = {@QueueBinding(value = @Queue(value = "canal_queue"), exchange = @Exchange(value = "canal_exchange01"), key = "canal_key")})
        public void process(String testMessage) {
            System.out.println("++++++++++++++++++++++");
            System.out.println("testMessage = " + testMessage);
        }
}

注意:canal 1.1.5版本之前是不能使用rabbitmq的,所以我们这次使用的是1.1.6版本的

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 可以回答这个问题。canal中间件可以实现redismysql数据同步,它可以监控mysql数据库的binlog日志,将数据变更同步到redis中。同时,canal也支持将mysql数据同步到其他数据库,如elasticsearch等。 ### 回答2: Canal中间件是一种用于实现数据数据同步的工具。它可以实现RedisMySQL之间的数据同步。 首先,我们需要设置Canal中间件与RedisMySQL的连接。通过配置Canal中间件的连接参数,使其能够连接到RedisMySQL数据库。可以设置监控的表和字段,以确定需要同步的数据范围。 当MySQL数据库中的数据发生变化时,Canal中间件会自动捕获这些变化并生成相应的Binlog日志。通过监听MySQL数据库的Binlog日志,Canal中间件能够实时获取更新的数据。 接下来,Canal中间件将获取到的数据进行处理,将变化的数据转换成Redis可以接受的数据格式,并将其写入到Redis数据库中。这样就实现MySQL数据变化的同步到Redis数据库的功能。 通过Canal中间件,我们可以实现MySQLRedis之间的双向数据同步。当MySQL中的数据发生改变时,Canal中间件会将变化的数据同步到Redis数据库中。同样地,当Redis中的数据发生改变时,Canal中间件也能够捕获这些变化并同步到MySQL数据库中。 这种数据同步的方式可以提高应用程序的性能和可靠性。通过将热点数据存储到Redis中,可以提高读取性能。同时,由于Canal中间件的实时同步机制,可以保证数据一致性。 总结起来,Canal中间件可以实现RedisMySQL之间的数据同步。它通过捕获MySQL数据库的Binlog日志,并将变化的数据转换成Redis可以接受的格式,实现数据的同步。这种方式可以提高应用程序的性能和可靠性。 ### 回答3: Canal中间件是一个开源的数据同步工具,用于将数据库中的数据同步到其他数据源。在实现RedisMySQL数据同步的场景下,可以通过以下步骤实现数据的同步: 第一步,安装配置Canal中间件。首先需要在服务器上安装Canal中间件,并配置Canal的相关参数,如数据源的地址、端口号、用户名和密码等。 第二步,配置Canal中间件连接MySQL数据库。需要在Canal配置文件中添加MySQL数据源的相关信息,包括MySQL服务器的地址、端口号、用户名和密码等。 第三步,配置Canal中间件连接Redis数据库。同样需要在Canal配置文件中添加Redis数据源的相关信息,包括Redis服务器的地址、端口号、密码等。 第四步,创建数据库表数据的监听和同步。通过创建Canal的实例,并指定需要监听的数据库和表,可以实现对特定表数据的监听和同步。 第五步,通过Canal中间件将MySQL数据同步到Redis。当MySQL数据库中的数据发生变化时,Canal中间件会将变更的数据解析并转发给Redis数据库,实现数据的同步。 通过以上步骤,即可实现RedisMySQL数据的同步。Canal中间件作为数据同步的桥梁,能够实时监听MySQL数据库的变化,并将变更的数据同步到Redis,确保数据一致性和及时性。 需要注意的是,在配置Canal中间件时,需要确保CanalMySQLRedis之间的网络连接正常,并且对应的用户有足够的权限来进行数据操作。同时,还需要进行相关的性能测试和优化,以确保数据同步的效率和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值