概述
- 参考最新官方文档:https://rocketmq.apache.org/zh/docs/quickStart/03quickstartWithDockercompose
- 以及:https://rocketmq.apache.org/zh/docs/deploymentOperations/04Dashboard
- 综合以上两个文档来搭建环境
搭建RocketMQ环境
1 ) 基于 docker-compose 来搭建
version: '3.8'services:namesrv:image: apache/rocketmq:5.2.0container_name: rmqnamesrvports:- 9876:9876networks:- rmqcommand: sh mqnamesrvbroker:image: apache/rocketmq:5.2.0container_name: rmqbrokerports:- 10909:10909- 10911:10911- 10912:10912volumes:- ./conf/broker.conf:/opt/rocketmq-5.2.0/conf/broker.conf # 挂载入自定义配置文件environment:- NAMESRV_ADDR=rmqnamesrv:9876depends_on:- namesrvnetworks:- rmqcommand: sh mqbroker -c /opt/rocketmq-5.2.0/conf/broker.conf # 使用自定义配置文件启动proxy:image: apache/rocketmq:5.2.0container_name: rmqproxynetworks:- rmqdepends_on:- broker- namesrvports:- 8080:8080- 8081:8081restart: on-failureenvironment:- NAMESRV_ADDR=rmqnamesrv:9876command: sh mqproxydashboard:image: apacherocketmq/rocketmq-dashboard:latestcontainer_name: rocketmq-dashboardports:- 8088:8080networks:- rmqenvironment:- JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876depends_on:- namesrvrestart: unless-stoppednetworks:rmq:name: rmqdriver: bridge
- 以上配置,是基于官方的2个文档综合而成的一个 yaml 配置文件
- 注意,如果 broker 中不配置 conf 文件,对 brokeIP 进行指定,则会使用容器内的地址
- 这时候,就需要自己的程序同样运行在相关的docker网络或打通和上述docker网络之间的连通
- 这个涉及到部署时的网络畅通,非常重要,在写程序的时候,可以像上述指定配置
2 )对于 proxy 的特别说明
- 在上述Docker Compose配置中,proxy服务指的是RocketMQ的代理服务
- 具体来说,它对应的是RocketMQ提供的一个可选组件——RocketMQ Proxy
- 虽然RocketMQ Proxy并非RocketMQ的核心组件(核心组件主要是Nameserver和Broker)
- 但它扮演着重要的角色,特别是在提高系统可用性和简化客户端接入方面
- 以下是关于RocketMQ Proxy的一些详细说明
2.1 )作用与目的
- 简化客户端配置
- 客户端只需要连接到Proxy
- 而不需要关心具体的Nameserver和Broker的地址,这减少了客户端的配置复杂度
- 尤其是在Broker集群规模大或频繁变动的情况下
- 负载均衡与高可用
- Proxy可以对客户端请求进行负载均衡,自动转发到不同的Broker
- 同时如果Broker发生故障,Proxy也能自动切换到其他可用Broker,提高了系统的高可用性
- 协议转换
- 虽然现代的RocketMQ客户端通常直接支持与Broker交互
- 但Proxy可以提供额外的协议转换能力,使得老版本或非标准的客户端也能接入
- 安全控制
- 作为中间层,Proxy可以更容易地实施访问控制、身份验证和加密等安全措施,增强系统安全性。
2.2 )配置与使用
- 在上述配置中,proxy服务通过以下方式定义:
- 映射端口:8080:8080和8081:8081,这通常是Proxy的HTTP和HTTPS端口,用于客户端的连接。
- 环境变量:NAMESRV_ADDR=rmqnamesrv:9876,指定了Proxy需要连接到的Nameserver地址,这是为了获取Broker信息以进行消息路由。
- 重启策略:restart: on-failure,意味着当Proxy服务因某种原因失败时,Docker会自动尝试重启它,增加了服务的健壮性。
- 命令:command: sh mqproxy,这是启动Proxy服务的命令,表明这是一个RocketMQ Proxy实例
2.3 )注意事项
- 性能考量:虽然Proxy带来了便利性和高可用性,但它是作为额外的一层存在,可能会引入额外的网络延迟和资源开销,尤其是在处理大量请求时
- 版本兼容性:确保Proxy的版本与RocketMQ Broker和Nameserver版本兼容,以避免潜在的通信或功能问题
- 配置优化:实际部署时,可能需要根据业务需求调整Proxy的配置,比如日志级别、最大连接数、超时时间等,以达到最佳性能和稳定性
- 综上所述,proxy在RocketMQ部署中提供了客户端与RocketMQ集群间的中介服务,旨在简化客户端配置、提升系统的灵活性和高可用性
3 )./conf/broker.conf 文件
- 参考前文:https://blog.csdn.net/Tyro_java/article/details/139453388
4 )运行和验证
- 运行:$
docker compose up -d
- 验证:$
docker ps
打开 UI 界面验证
- 访问: http://127.0.0.1:8088
代码实现
1 )方式 1
- 参考前文:https://blog.csdn.net/Tyro_java/article/details/139453388
- 此种方式仍可用
2 )方式2
- 同样使用 rocketmq-client-go
- 参考官方示例 : https://github.com/apache/rocketmq-client-go/tree/master/examples