之前已经分享了一篇关于springboot + canal实现缓存更新的功能,但这种方案存在缺陷,当项目属于微服务架构时,一个服务可能有多个实例,即使多个实例都在监听canal的消息,但是只有一个实例能够消费该消息以此更新缓存,针对只是Redis做缓存的情况下没有问题,但是多级缓存Caffeine+Redis就有问题了,只有一个服务实例能够更新本地的Caffeine缓存,其他服务实例就无法同步更新。因此我想到可以RabbitMQ实现多服务实例的缓存同步更新操作。而canal本身就可以与RabbitMQ联合使用。
在Linux服务器上利用docker部署MySQL和RabbitMQ后,再部署canal,这次部署和之前有差异。
首先启动容器:
[root@iZ2vc97qcawcm6uqblda2fZ ~]# docker run -d canal/canal-server:v1.1.5
ddcce88c2050213f584849704ddb9401f6a8be1a923b1987f49729ea558e3a31
然后从容器中拷贝配置文件
[root@iZ2vc97qcawcm6uqblda2fZ canal]# docker cp ddcce88c2050:/home/admin/canal-server/conf/canal.properties ./conf/
docker cp ddcce88c2050:/home/admin/canal-server/conf/example/instance.properties ./conf/
修改canal.properties配置文件信息:
#####