Canal配置

注:开发环境服务器:172.16.8.35 用develop用户登录。

  1. 进入canal安装目录:cd /home/devops/canal/deployer/conf

  2. 复制dst_vehicle目录,重命名为自己服务的数据库名 cp -r dst_vehicle/ dst_bill

  3. 进入dst_bill目录,删除h2.mv.dbmeta.dat两个文件

  4. 编辑instance.properties文件,如图:

canal.instance.filter.regex=dst_db_bill\\.(bill_base_master_info)

canal.mq.dynamicTopic=dst_db_bill:(dst_db_bill\\..*)

5. canal配置完毕,开始整合代码

6. 绑定MQ交换机、路由、队列关系

@Slf4j
@Configuration
public class BillCanalMqBindConfig {

    @Value(value = "-${spring.profiles.active}")
    private String profile;

    public final static String DST_CANAL_EXCHANGE = "dst-canal-exchange";
    private final static String DST_DB_BILL_CANAL_QUEUE = "dst-db-bill-canal-queue";
    private final static String DST_DB_BILL_CANAL_KEY = "dst_db_bill";

    /***************************  初始化交换机 ***************************/
    @Bean
    public TopicExchange dstCanalExchange() {
        TopicExchange topicExchange = new TopicExchange(DST_CANAL_EXCHANGE + profile);
        log.info("交换机:[{}]初始化成功................", topicExchange.getName());
        return topicExchange;
    }

    /***************************  初始化消息队列 ***************************/
    @Bean
    public Queue dstBillCanalQueue() {
        Queue queue = new Queue(DST_DB_BILL_CANAL_QUEUE + profile, true);
        log.info("队列:[{}]初始化成功................", queue.getName());
        return queue;
    }

    /***************************  绑定交换机 ***************************/
    @Bean
    public Binding dstBillCanalRouting() {
        Binding binding = BindingBuilder.bind(dstBillCanalQueue()).to(dstCanalExchange()).with(DST_DB_BILL_CANAL_KEY);
        log.info("消息队列:[{}] 成功绑定到交换机:[{}] ................", dstBillCanalQueue().getName(), dstCanalExchange().getName());
        return binding;
    }
}

 7. 新增消费者,监听队列,打印消息

@RabbitListener(queuesToDeclare = {@Queue("dst-db-bill-canal-queue-dev")}, containerFactory = "defaultRabbitListenerContainerFactory")
public void canalListener(Channel channel, Message message) throws IOException {
    String msg = new String(message.getBody(), StandardCharsets.UTF_8);
    log.info("监听到canal数据更改消息:{}", msg);
}

 8. 修改刚刚在canal里面配置好的表,消费者正常监听到消息,消费正常

9. 结束 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值