使用 Docker 部署 canal,并将消息推送到 RabbitMQ

简介: 上一篇已经介绍了使用 Docker 部署 canal 服务,实现 MySQL 数据库 binlog 日志解析,并且用官方提供的客户端程序成功读到了消息。但在生产环境下还不能这么用,更好的做法是将消息发送到消息队列,然后再从消息队列消费。

这里我选择的是 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:


QQ图片20220423123130.png


然后新建队列:


QQ图片20220423123147.png


最后绑定队列:


QQ图片20220423123150.png


这里要注意,Routing key 一定要和之前配置的一致。

到这里,如果顺利的话队列里就应该有消息了。


参考文档:

www.siques.cn/doc/340


相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1466 108
|
11月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
4402 4
|
运维 Devops 持续交付
揭秘 Docker 自动部署神器 Websoft9:热门开源软件一键部署
在企业IT建设中,软件部署常面临效率低、易出错等问题。通过Docker与自动化工具,可实现高效、标准化和可追溯的部署流程,提升企业应用交付效率,降低运维门槛,助力中小企业实现自动化部署。
733 5
揭秘 Docker 自动部署神器 Websoft9:热门开源软件一键部署
|
JavaScript 算法 前端开发
【Docker项目实战】使用Docker部署paopao-ce微社区
【Docker项目实战】使用Docker部署paopao-ce微社区
755 84
【Docker项目实战】使用Docker部署paopao-ce微社区
|
设计模式 Linux 开发工具
Docker部署会吗?
本段内容主要介绍了Docker常用命令、Linux基础指令及日志查看方法,还涉及SpringMVC的执行流程、设计模式与注解,适合用于面试中技术能力的展示。
264 0
|
运维 Cloud Native 开发者
Docker:现代化应用开发与部署的神器
Docker:现代化应用开发与部署的神器
359 101
|
12月前
|
存储 Docker Python
docker 部署 sftp
本文介绍SFTP服务的部署与配置,包括users.conf用户配置规则、Docker容器运行命令及上传目录权限说明,重点解析atmoz/sftp镜像的chroot机制与子目录映射,确保用户登录后正确访问/upload目录,并提供Python脚本实现文件上传示例。
906 12
docker 部署 sftp
|
12月前
|
运维 Linux 数据库
基于 Docker 部署 n8n 指南,新手一看就会
本教程详解如何通过 Docker 快速部署开源自动化工具 n8n,适合新手快速上手。内容涵盖官方部署步骤、常见难点及第三方一键部署方案,助你高效搭建自动化工作流平台。
2421 6
|
11月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
497 5