畅购06—— 广告数据同步(Canal和MQ技术)

1.canal原理

  

  1. canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
  2. mysql master收到dump请求,开始推送binary log给slave(也就是canal)
  3. canal解析binary log对象(原始为byte流)

2.搭建canal微服务

第五天我们已经用nginx和lua实现了只需输入地址请求就可以完成首页的部署和广告的更新,但如何用代码进行实时更新呢?

  • 思路:
    canal伪装成mysql slave,监听tb_ad表。定义mq配置,简单模式即可,只要表中数据改变,mq立马发送消息,内容为position的值。定义一个mq监听,此队列一旦有新消息,立马执行更新广告数据的操作。

  • 具体操作:

  1. 创建微服务模块,pom文件中引入starter-canal依赖
  2. 定义启动类,配上注解@EnableCanalClient声明此为canal客户端
  3. 添加配置文件application.properties,canal中已配置监听哪个数据库
canal.client.instances.example.host=192.168.200.128
canal.client.instances.example.port=11111
canal.client.instances.example.batchSize=1000
spring.rabbitmq.host=192.168.200.128
  1. 创建mq配置类,根据业务可能需要配置多个消息队列

3.1广告缓存更新

  1. 在canal微服务中编写BusinessListener类,代码如下:
@CanalEventListener
public class BusinessListener {
   

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     *
     * @param eventType  当前操作数据库的类型
     * @param rowData  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值