电商项目——CG
1.canal原理
- canal模拟mysql slave的交互协议,
伪装自己
为mysql slave,向mysql master发送dump协议 - mysql master收到dump请求,开始推送binary log给slave(也就是canal)
- canal解析binary log对象(原始为byte流)
2.搭建canal微服务
第五天我们已经用nginx和lua实现了只需输入地址请求就可以完成首页的部署和广告的更新,但如何用代码进行实时更新呢?
-
思路:
canal伪装成mysql slave,监听tb_ad表。定义mq配置,简单模式即可,只要表中数据改变,mq立马发送消息,内容为position的值。定义一个mq监听,此队列一旦有新消息,立马执行更新广告数据的操作。 -
具体操作:
- 创建微服务模块,pom文件中引入starter-canal依赖
- 定义启动类,配上注解@EnableCanalClient声明此为canal客户端
- 添加配置文件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
- 创建mq配置类,根据业务可能需要配置多个消息队列
3.1广告缓存更新
- 在canal微服务中编写BusinessListener类,代码如下:
@CanalEventListener
public class BusinessListener {
@Autowired
private RabbitTemplate rabbitTemplate;
/**
*
* @param eventType 当前操作数据库的类型
* @param rowData