写在前面
现在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
- 下载
canal.deployer
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5-alpha-1/canal.deployer-1.1.5-SNAPSHOT.tar.gz
- 将
canal.deployer
解压到指定文件夹
mkdir canal tar -zxvf canal.deployer-1.1.1.tar.gz -C canal
-
查看解压缩文件
三、修改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;
七、查看结果

