这里我选择的是 RabbitMQ。
原来看官方文档发现只支持 Kafka 和 RocketMQ,但好在最新版 1.1.5 也支持了 RabbitMQ,而且镜像也已经打好了。
如果使用 Docker 部署的话,直接拉取最新的镜像即可。
配置 canal
第一步拉取镜像:
# docker pull canal/canal-server:latest 复制代码
然后启动容器,从容器中拷贝出配置文件:
# docker cp canal-server:/home/admin/canal-server/conf/canal.properties ./ # docker cp canal-server:/home/admin/canal-server/conf/test/instance.properties ./ 复制代码
修改 canal.properties
文件,配置输出到 RabbitMQ,有以下几处要改:
# 指定 RabbitMQ canal.serverMode = rabbitMQ # RabbitMQ 配置 rabbitmq.host = 127.0.0.1 rabbitmq.virtual.host = / rabbitmq.exchange = exchange.canal rabbitmq.username = xxxx rabbitmq.password = xxxx 复制代码
这里有两点需要说明,一是我在网上找的很多文章,关于 RabbitMQ 的配置都是这样的:
canal.mq.servers = xxx canal.mq.vhost = / canal.mq.exchange = exchange.canal canal.mq.username = admin canal.mq.password = admin 复制代码
但是我这样配置并不成功,也可能是版本的问题,我没有更多去验证。
第二个是目前 RabbitMQ 的配置还不支持端口,只能使用默认端口 5672。
接下来修改 instance.properties
文件:
# MySQL 地址 + 端口 canal.instance.master.address=host:port canal.instance.dbUsername=xxxx canal.instance.dbPassword=xxxx # 对应到 RabbitMQ 的话是 Routing key canal.mq.topic=canal-routing-key 复制代码
docker-compose 文件:
version: '3' services: canal-server: image: canal/canal-server container_name: canal-server restart: unless-stopped network_mode: host ports: - 11111:11111 volumes: - ./canal.properties:/home/admin/canal-server/conf/canal.properties - ./instance.properties:/home/admin/canal-server/conf/test/instance.properties - ./log/:/home/admin/canal-server/logs/ 复制代码
一切就绪,启动服务:
# docker-compose up -d 复制代码
配置 RabbitMQ
首先新建 exchange:
然后新建队列:
最后绑定队列:
这里要注意,Routing key 一定要和之前配置的一致。
到这里,如果顺利的话队列里就应该有消息了。
参考文档: