网站首页 > 博客文章 正文
RocketMQ简介
RocketMQ是由阿里巴巴捐赠给Apache的一款分布式、队列模型的开源消息中间件,经历了淘宝双十一的洗礼,实现业务削峰,并支持事务消息、顺序消息、批量消息、定时消息、消息回溯等。它里面有几个区别于标准消息中件间的概念,如Group、Topic、Queue等。系统组成则由Producer、Consumer、Broker、NameServer等。
背景介绍
在业务的需要下部署了一套RocketMQ集群环境,随着集团业务的发展,出现某个与MQ集群不在同一内网环境下的服务需要访问MQ集群,这时需要MQ集群可以有内外网互通的能力。开源版本的RocketMQ是不支持内外网同时可以访问的能力的,只能在内网访问与外网访问能力中二选一,但是一些云厂商提供的消息队列RocketMQ版是具有内外网互通的特性的;本文只讨论开源版自建RocketMQ集群的情况下实现内外网互通能力的方案,为有内外网互通业务场景需求的小伙伴提供一些思路。
方案介绍
以下讨论的方案都是基于RocketMQ服务具有内网消息交互能力的情况下讨论实现外网消息交互的能力,基于RocketMQ 4.x.x版本。
方案一 自建代理服务Proxy
代理服务对内网具有RocketMQ原生的生产消费能力, 对外网开放访问能力,代理服务处理消息的中转,通过消息中转实现MQ消息内外网互通的能力;
弊端:
1.代理服务需要通过自研提供消息中转的能力;
2.代理服务会成为瓶颈;
3.代理服务存在单点问题,在外网的生产消费者无法使用到MQ原生的集群能力;
方案二 修改源代码 NameServer同时存储内外网IP
了解RocketMQ中Producer、Consumer、Broker、NameServer这4个角色交互原理的小伙伴都应该知道,Producer或Consumer都是通过NameServer拿到真实的Broker节点的IP,只要修改RocketMQ源码,将Broker的真实内外网IP地址都注册到NameServer中,然后Producer或Consumer根据自身的内外网角色获取对应的内外网IP进行交互即可实现内外网互通;
弊端:
1.需要熟悉RocketMQ原理与源代码,技术门槛较高;
2.修改源码后需要全量测试;
3.RocketMQ升级不好维护;
方案三 修改源代码 代理Producer与Consumer的网络通讯层实现内外网IP转换
通过了解原理与阅读源码,可以看到Producer或Consumer与Broker的网络通讯都在同一个基础包的同一个类中,我们可以对该网络通讯类实现一个代理对象,同时维护一份Broker节点的内外网IP的映射关系,在代理对象中实现网络通讯时的内外网IP转换;
举例说明:
与RocketMQ Broker不在同一个内网环境下的Producer节点,需要与Broker交互,只能通过外网IP连接;但是Producer通过NameServer拿到的是Broker的内网IP,在需要与Broker节点进行网络通讯时,通过代理对象将网络通讯方法上的内网IP参数通过映射关系找到并替换为外网IP,从而实现内外网互通;
弊端:
1.需要维护Broker节点的内外网IP映射关系
总结
从实现的技术难度与时间、人力成本上考虑以及优劣势分析,方案三是目前想到的最优方案。文章RocketMQ如何突破内网限制(实战篇)将分享下从代码层面方案三的具体实现。希望能够给小伙伴能带来帮助,谢谢!
猜你喜欢
- 2024-11-18 快速使用docker方式部署安装RocketMQ
- 2024-11-18 介绍新版RocketMQ v4.9.3 下载、安装、配置的完成过程
- 2024-11-18 docker-4:mac使用docker部署开发用rocketmq
- 2024-11-18 扩展RocketMQ 使其支持任意时间精度的消息延迟
- 2024-11-18 SpringBoot3.0 + RocketMq 构建企业级数据中台完结
- 2024-11-18 centos7安装部署RocketMQ分布式集群
- 2024-11-18 「转」Spring Cloud异步场景分布式事务怎样做?试试RocketMQ
- 2024-11-18 RocketMQ集群搭建
- 2024-11-18 RocketMQ 的持久化配置
- 2024-11-18 RocketMQ,如何处理消息积压问题
你 发表评论:
欢迎- 08-06nginx 反向代理
- 08-06跨表插入连续的日期,sheetsname函数#excel技巧
- 08-06初中生也能学的编程,不走弯路,先用后学
- 08-06find命令的“七种武器”:远不止-name和-type
- 08-06恶意代码常见的编程方式
- 08-06kali2021ping 外网不通
- 08-06因为一个函数strtok踩坑,我被老工程师无情嘲笑了
- 08-06hadoop集群搭建详细方法
- 47℃nginx 反向代理
- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- vueproxytable (64)
- npminstallsave (63)
- #NAME? (61)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)