canal 整合RabbitMQ


写在前面

现在canal自身已经整合了RabbitMQ,所以开发人员只需要配置就可以实现将消息发送到RabbitMQ。不过这里还有简单的小问题需要大家注意。

canal.mq.servers 指定rabbitmq 地址不能加端口
如下所示:
canal.mq.servers = 192.168.5.4:5762 错误
canal.mq.servers = 192.168.5.4 正确

一、 环境准备

canal-1.15-alpha-1
rabbitmq-3.6.15
mysql-5.7.17

设置mysql

mysql 开启binlog
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
授权canal 连接mysql

授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant。

CREATE USER canal IDENTIFIED BY 'canal';  
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

二、 安装canal.server

  1. 下载canal.deployer
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5-alpha-1/canal.deployer-1.1.5-SNAPSHOT.tar.gz
  1. canal.deployer解压到指定文件夹
mkdir canal

tar -zxvf canal.deployer-1.1.1.tar.gz -C canal 
  1. 查看解压缩文件

三、修改canal 配置文件

conf/canal.properties

.....
# 指定rabbitmq
canal.serverMode = rabbitmq
...
# rabbitmq 设置
canal.mq.servers = 192.168.5.4 ## 注意不要加端口号,不然会报IPV6错误。
canal.mq.vhost=/
canal.mq.exchange=exchange.trade.order
canal.mq.username=admin
canal.mq.password=admin

conf/example/instance.properties

canal.instance.mysql.slaveId=9999
...
# position info
canal.instance.master.address=192.168.3.157:3306 ## 数据库地址
# enable druid Decrypt database password
canal.instance.defaultDatabaseName=file ## 数据库名


canal.mq.topic=example # 路由键
...

四、启动

启动canal

进入bin,启动canal

./startup.sh

查看启动日志

cat logs/canal/canal.log
cat logs/example/example.log

五、新建队列

rabbitmqadmin declare exchange --vhost=/ name=exchange.trade.order type=topic durable=true  --username=admin --password=admin
 
rabbitmqadmin declare queue --vhost=/ name=exchange.trade.order  durable=true --username=admin --password=admin
  
rabbitmqadmin --vhost=/ declare binding source="exchange.trade.order" destination_type="queue" destination="exchange.trade.order" routing_key="example" --username=admin --password=admin

六、更新数据

update tb_account set email = 'b' where id = 3;

七、查看结果

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM