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