寫在前面
現在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;
七、查看結果

