前提
在上一篇里面介绍了关于rocketMQ的基础知识和单机搭建,现在把自己的集群搭建和监控以及springboot整合贴出来分享
应用场景和性能
这里参照了《rocketMQ》集群解决方案:https://yq.aliyun.com/ziliao/306770 rocketMQ能帮我们解决什么问题?
1、异步处理,将不是必须要在当前处理的业务逻辑,进行异步处理,比如注册之后的短信,邮箱的发送
2、应用解耦:
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。
假如:在下单时库存系统不能正常使用,也不影响正常下单,因为下单后,订单系统写入消息队列就不再关系其他后续的操作了。实现订单系统与库存系统的应用解耦。
3、流量削峰,也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。
应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。
可以控制活动的人数
可以缓解短时间内高流量压垮应用
用户的请求,服务器接收后,首先写入消息队列。加入消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面
秒杀业务根据消息队列中的请求信息,再做后续处理
4、日志处理
5、消息通讯
6、性能:
rocketMQ单机也可以支持亿级的消息堆积能力,单机写入TPS单实例约7万条/秒,单机部署3个broker,可以跑到最高12万条/秒,消息大小10个字节
网络集群节点描述
1、NameServer可集群部署,节点之间无任何信息同步
2、broker部署相对复杂,broker分为master和slave,一个master可以对应多个slave,但是一个slave只能对应一个master,master与slave的对应关系通过指定相同的brokerName,不同的brokerId来定义,brokerId=0表示master,非0表示slave,master也可以部署多个,只需指定不同的brokerName和监听端口
3、producer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取topic路由信息,并向提供topic服务的master建立长连接,且定时向master发送心跳。producer完全无状态,可集群部署。
4、consumer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取topic路由信息,并向提供Topic服务的master、slave建立长连接,且定时向master、slave发送心跳。consumer既可以从master订阅消息,也可以从slave订阅消息,订阅规则由broker配置决定。
集群部署
这里基于最新版4.3.2搭建双nameserver双master双slave集群
准备环境
1、两台linux服务器(centos7-64位)
2、maven3.5以上
3、64位JDK1.8以上
4、工具:我这里使用的是finalShell,可以选择xshell+xftp
部署结构如下:
开始搭建
1、下载安装包上传到节点服务器
下载地址:
https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.2/rocketmq-all-4.3.2-bin-release.zip
下载完成上传到节点指定目录(我的是放到/date/rocketMQ)
2、压解zip包
这里提一下
rocketMQ官方文档中默认提供了三种建议配置模式(conf目录中):
1、2m-2s-async(主从模式异步刷盘机制)在这里我选的是主从异步的模式
2、2m-2s-sync(主从模式同步刷盘机制)
3、2m-noslave(仅master)
修改配置文件
在同一台服务器启动多个broker时,需使用不同的broker配置文件来启动(我这里采用改的是节点1启动a-m和b-s)
关于配置文件的详细信息在官方文档中有明确标注,这里不做过多描述,贴出地址,个性化配置请参照:http://rocketmq.apache.org/docs/rmq-deployment/
listenPort默认为10911,同服务器启动多个broker时,需区分端口
broker启动时默认内存设置比较大,如果报错‘Cannot allocate memory’ 修改bin目录的runbroker.sh文件
单节点启动多个broker实例时,存储路径如果显式设置,则需要指定不同的storePath路径,默认不同
修改broker-a.properties配置文件
v