RocketMq消息队列实施方案-完整版
一句话总结mq的工作流程

一句话总结mq的工作流程
MQ(消息队列)是一种用于实现异步通信的技术,它的工作流程如下:
1. 生产者将消息发送到消息队列中,消息可以是任何形式的数据,如文本、图片、视频等。
2. 消息队列接收到消息后,将其存储在内部的存储空间中,等待消费者处理。
3. 消费者从消息队列中获取消息,可以根据需求选择同步或异步方式进行消费。
4. 消费者处理完消息后,可以选择确认消费成功或放弃消费,如果放弃消费,消息将重新进入队列等待下一次消费。
5. 如果消息队列的存储空间已满,新的消息将被拒绝存储,生产者需要等待空间释放后再发送消息。
6. 消息队列可以支持多个消费者同时消费消息,每个消费者可以独立处理消息,提高系统的并发性能。
7. 消息队列可以通过设置优先级、过期时间等方式对消息进行管理,以满足不同场景下的需求。
8. 消息队列可以实现消息的持久化,即使系统故障或重启,之前的消息也能够保留,确保消息的可靠性和稳定性。
9. 消息队列可以实现消息的广播和订阅,一个消息可以被多个消费者同时接收,实现信息的传递和共享。
10. 消息队列可以实现系统解耦,生产者和消费者之间不直接通信,
通过消息队列进行中转,降低系统的耦合度。
总结:MQ是一种实现异步通信的技术,生产者将消息发送到消息队列中,消费者从队列中获取消息进行处理,通过消息队列可以实现系统解耦、提高并发性能、保证消息的可靠性和稳定性,适用于各种场景下的消息传递和共享。
Python:Rocketmq消息队列使用

Python:Rocketmq消息队列使⽤rocketmq可以与kafka等⼀起使⽤,⽤于实时消息处理。
安装rocketmq:⽣产消息producer:from rocketmq.client import Producer, Messageimport jsonproducer = Producer('PID-test')producer.set_namesrv_addr('xxx.xxx.xxx.xxx:xxxxx') #rocketmq队列接⼝地址(服务器ip:port)producer.start()msg_body = {"id":"001","name":"test_mq","message":"abcdefg"}ss = json.dumps(msg_body).encode('utf-8')msg = Message('topic_name') #topic名称msg.set_keys('xxxxxx')msg.set_tags('xxxxxx')msg.set_body(ss) #message bodyretmq = producer.send_sync(msg)print(retmq.status, retmq.msg_id, retmq.offset)producer.shutdown()其中:设置ip:port的位置:producer.set_namesrv_addr('xxx.xxx.xxx.xxx:xxxxx')当只有单⼀服务器时,格式是上⾯这个;当有多个服务器地址(集群模式)时,可以使⽤:producer.set_namesrv_addr("xxx.xxx.xxx.xxx:xxxxx,xxx.xxx.xxx.xxx:xxxxx,xxx.xxx.xxx.xxx:xxxxx")不过以下这种⽅式本⼈测试不通过:producer.set_namesrv_addr(["xxx.xxx.xxx.xxx:xxxxx","xxx.xxx.xxx.xxx:xxxxx","xxx.xxx.xxx.xxx:xxxxx"])如果使⽤pandas数据,pandas数据可以直接转换some_df.to_json(orient='records').encode('utf-8'),然后放⼊body中发送。
消息队列的使用方法

消息队列的使用方法消息队列是一种用于在不同的系统和应用程序之间传递和传输数据的中间件。
它使用先入先出(FIFO)的方式存储和分发消息,可以提高系统的可靠性、扩展性和性能。
在实际应用中,消息队列有着广泛的使用场景,包括异步处理、解耦系统组件、削峰填谷、流量控制以及实现可靠的消息传递等。
下面将详细介绍消息队列的使用方法。
1.选择消息队列在开始使用消息队列之前,需要根据实际需求选择适合的消息队列。
常见的消息队列有Kafka、RabbitMQ和ActiveMQ等。
选择时,需要考虑消息的延迟要求、系统的可用性、消息吞吐量等因素。
2.定义消息格式在使用消息队列之前,需要定义消息的格式。
消息的格式应该简洁清晰,包含必要的信息,并考虑消息的扩展性和兼容性。
可以使用JSON、XML或者自定义的消息格式。
3.创建消息生产者消息生产者负责生成和发送消息到消息队列。
在创建消息生产者时,需要指定消息队列的地址和端口,并进行身份验证(如果需要)。
然后,通过消息队列提供的API,将消息发送到指定的队列中。
4.创建消息消费者消息消费者用于接收处理消息队列中的消息。
消费者需要连接到消息队列,并订阅一个或多个队列。
通过注册回调函数,消费者可以在消息到达时对消息进行处理。
5.异步处理消息一般情况下,消息队列的主要优势在于它可以实现异步处理。
消息生产者发送消息之后,可以立即返回,而不需要等待消息被消费者处理。
这种异步处理方式可以提高系统的性能和吞吐量。
6.解耦系统组件消息队列可以将系统中的各个组件解耦,使得它们可以独立运行和扩展。
消息生产者和消费者不需要直接知道对方的存在,它们只需要连接到消息队列即可。
7.削峰填谷消息队列可以用于平滑处理系统中的峰值流量。
当流量高峰到来时,消息队列可以暂时保存消息,等到系统负载下降时再进行消费。
这样可以避免系统因流量突增而崩溃。
8.流量控制通过设置合适的缓冲区大小和消费速率,消息队列可以实现流量控制。
python实现的消息队列RocketMQ客户端使用

python实现的消息队列RocketMQ客户端使⽤rocketmq-python 是⼀个基于 rocketmq-client-cpp 封装的 RocketMQ Python 客户端。
⼀、Producer#coding:utf-8import jsonfrom rocketmq.client import Producer, Messageproducer = Producer('PID-001') # 实例化Producer对象,指定group-id(可任意取名)producer.set_namesrv_addr('xxxxxx:xx') # rocketmq队列接⼝地址(服务器ip:port)producer.start() # 开启# 实例化消息对象,需要指定应⽤名:topic_namemsg = Message('your_topic_name') # 实例化消息对象时,传⼊topic名称,⼀个应⽤尽可能⽤⼀个Topic# 指定消息的keysmsg.set_keys('your_keys') # 业务层⾯的唯⼀标识码,⽅便将来定位消息丢失问题。
服务器会为每个消息创建索引(哈希索引),应⽤可以通过topic,key来查询这条消息内容,以及消息被谁消费。
# 指定消息tagsmsg.set_tags('your_tags') # 消息⼦类型⽤tags来标识,tags可以由应⽤⾃由设置。
#指定消息体(内容)msg_body = {'name':'laowang','age':28}body = json.dumps(msg_body).encode('utf-8')msg.set_body(body) # 传⼊消息体(json字节串)# 向队列发送消息ret = producer.send_sync(msg)print(f'status:{ret.status}') # 0表⽰OKprint(f'msg_id:{ret.msg_id}') # 消息id,同消费者获取到的消息idprint(f'offset:{ret.offset}') # 偏移量,默认从0开始,1,2。
RocketMQ-官方中文文档

RocketMQ-官⽅中⽂⽂档
GitHub地址:
Gitee(速度更快):
概念和特性
介绍RocketMQ的基本概念模型。
介绍RocketMQ实现的功能特性。
架构设计
介绍RocketMQ部署架构和技术架构。
介绍RocketMQ关键机制的设计原理,主要包括消息存储、通信机制、消息过滤、负载均衡、事务消息等。
样例
介绍RocketMQ的常见⽤法,包括基本样例、顺序消息样例、延时消息样例、批量消息样例、过滤消息样例、事务消息样例等。
最佳实践
介绍RocketMQ的最佳实践,包括⽣产者、消费者、Broker以及NameServer的最佳实践,客户端的配置⽅式以及JVM和linux的最佳参数配置。
介绍RocketMQ消息轨迹的使⽤⽅法。
介绍如何快速部署和使⽤⽀持权限控制特性的RocketMQ集群。
介绍Dledger的快速搭建⽅法。
介绍Dledger的集群部署⽅式。
运维管理
介绍单Master模式、多Master模式、多Master多slave模式等RocketMQ集群各种形式的部署⽅法以及运维⼯具mqadmin的使⽤⽅式。
API Reference(待补充)。
rocketmq队列类型

RocketMQ是一种高性能的分布式消息系统,它提供了队列(Queue)这种基本的消息存储方式。
队列是RocketMQ中最基本的消息存储单元,消费者可以从队列中取出消息进行消费。
队列类型的选择和设计是RocketMQ的一个重要部分,因为它影响着系统的吞吐量、稳定性以及消费者与生产者之间的协调方式。
RocketMQ提供了三种队列类型:普通队列(Normal Queue)、优先队列(Priority Queue)和延迟队列(Delay Queue)。
每种队列类型都有其特定的用途和特性。
1. 普通队列(Normal Queue):这是RocketMQ中最基本的队列类型。
消息按照发送的顺序进入队列,消费者可以按照顺序取出消息。
普通队列适用于大多数场景,因为它提供了较好的一致性和可靠性。
然而,由于其无优先级和延迟处理机制,它可能在处理大量消息时性能表现一般。
2. 优先队列(Priority Queue):优先队列为消息提供了优先级机制。
高优先级的消息将先于低优先级的消息被取出和消费。
这种队列类型适用于那些需要优先处理的场景,例如,重要消息需要优先处理以避免错过关键的发送时间。
优先队列在处理高优先级消息时具有较好的性能,但需要注意,如果优先级机制设计不合理,可能会导致低优先级的消息被长时间积压。
3. 延迟队列(Delay Queue):延迟队列允许消费者设置消息的取出时间。
也就是说,消费者可以在指定的时间后从队列中取出延迟的消息。
这种队列类型适用于那些需要延迟处理的场景,例如,一些消息需要在一段时间后才能被消费,或者需要避免在忙碌时消费消息。
延迟队列的性能表现取决于设置的时间,过短的延迟可能会导致消费者的处理压力增大,而过长的延迟则可能使消费者错过关键的消息。
选择哪种队列类型取决于具体的业务需求和系统特性。
RocketMQ的设计者根据不同的场景需求,提供了这三种队列类型,每种类型都有其特定的用途和优势,同时也存在一定的局限性。
rocketmq定时消息原理

rocketmq定时消息原理RocketMQ是一个分布式消息中间件系统,提供高吞吐量、低延迟、高可用性和可扩展性的分布式消息传输服务。
它支持定时消息,也称为延迟消息,可以让消息在指定的时间点被消费者消费。
RocketMQ的定时消息原理如下:1. 生产者发送定时消息:生产者在发送消息时,可以设置一个延迟级别(Delay Level)参数。
延迟级别是一个整数值,表示消息需要延迟的时间。
RocketMQ根据延迟级别决定消息需要在多少时间之后被消费者消费。
2. 定时消息存储:当生产者发送定时消息时,RocketMQ将消息存储在Topic的Delay队列中。
Delay队列是一个有序队列,按照消息的延迟时间排序。
3. 延迟消息消费:RocketMQ的消息消费者会定时地轮询Delay队列,获取到到达消费时间的消息。
例如,如果一些消息的延迟时间是10分钟,那么消费者在10分钟之后才会收到这条消息。
在获取到消息后,消费者可以进行相应的处理。
4. 完成消息消费:消费者处理完消息后,可以向RocketMQ发送确认消息(Acknowledge)。
RocketMQ会根据消费者发送的确认消息来判断消息是否消费成功。
RocketMQ的定时消息实现原理主要涉及到延迟消息队列、消息的存储以及对延迟消息的消费处理。
延迟消息队列是RocketMQ中用于存储定时消息的数据结构。
它是一个有序队列,按照消息的延迟时间进行排序。
RocketMQ会根据消息的延迟级别将消息放入对应的延迟消息队列中。
RocketMQ的存储模块(Store)负责将消息存储到磁盘中,并提供消息的读写功能。
存储模块会将生产者发送的定时消息存储到对应的Topic的延迟消息队列中。
消费者轮询延迟消息队列,获取到到达消费时间的消息。
RocketMQ会监控消息的消费时间,并在需要消费的消息到达消费时间时将其推送给相应的消费者。
消费者获取到延迟消息后,可以进行相应的处理,例如写入数据库、发送通知等。
RocketMQ消息消费以及进度管理解析

RocketMQ消息消费以及进度管理解析最近ONS 消息堆积的很严重,并且经常发现部分几乎没有消息消费的消费者也提示堆积,所以有必要深入了解一下RocketMQ 的设计思路,来看看堆积量如何计算,以及如何正确的使用Topic 以及Consumer 等组件。
产生的问题背景在于,由于一开始对于RocketMQ不够了解,同时足够懒得原因,导致我们所有业务都仅适用了一个topic,所有业务线通过订阅不同的tag来进行消费,本次深入了解后将进行业务重构,以正确的姿势使用RocketMQ。
本次要排查的问题包括:1、消息拉取时模型,是否会将非该消费者消息的消息也拉取到客户端?2、如何计算堆积?问题1的本质问题是消息拉取的过滤模型在于客户端,还是在服务端?问题2的本质问题是消息如何存储计算?欲探究该问题则需要明确RocketMQ的底层存储模型设计,从顶层设计俯瞰消息队列整个框架。
底层存储模型摘自RocketMQ技术内幕.pngcommitlog 是整个消息队列存储的核心文件,而consumerquque是逻辑消息队列,主要存储commitlog offset,消息长度,tag的hashcode,用于在消息消费时快速定位消息在commit log文件位置,便于读取消息。
IndexFile俗称索引文件,主要存储消息key的hashcode以及commitlog offset,用于通过key 快速定位到消息在commit log文件位置,便于读取消息。
消息拉取模型分析找到问题1的答案之前,先思考消息队列投递时做了什么?DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");// Specify name server addresses.producer.setNamesrvAddr("localhost:9876");//Launch the instance.producer.start();for (int i = 0; i < 100; i++) {//Create a message instance, specifying topic, tag and message body.Message msg = new Message("TopicT est" /* Topic */,"TagA" /* Tag */,("Hello RocketMQ " +i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */);//Call send message to deliver message to one of brokers.SendResult sendResult = producer.send(msg);System.out.printf("%s%n", sendResult);}以上是代码是从官网的地址copy而来,虽简单但是从其中足以找到消息投递时所需要的基本条件包括namesrvAddr、topic 、tag。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
消息队列实施方案1、背景异步解耦合、给前端系统提供最高效的反应2、常见消息队列对比2、1 ActiveMqActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现优点:Java语言支持集群模式缺点:性能在消息中间件中处于下游2、2 RabbitmqRabbitmq是基于AMQP使用erlang语言实现的消息队列系统优点:1、完整的消息队列系统,支持多种消息队列模式,包括竞争消费;2、支持集群模式,扩展集群容量和性能比较方便,集成了集群的监控和管理;3、支持消息的持久化;缺点:1、需要学习比较复杂的接口和协议,比较耗费时间;2、性能不是特别理想大概在1wqps左右;3、使用Erlang语言,语言基础;2、3 KafkaKafka 是LinkedIn 开发的一个高性能、分布式的消息发布订阅系统。
优点:1、分布式集群可以透明的扩展,增加新的服务器进集群。
2、高性能。
单机写入TPS约在百万条/秒3、容错。
数据都会复制到几台服务器上。
缺点:1、复杂性。
Kafka需要zookeeper 集群的支持,T opic通常需要人工来创建,部署和维护较一般消息队列成本更高定位于日志传输、存在消息丢失的肯能、消息乱序3、消息发送错误无重试2、4 RocketMQRockerMq 是阿里公司中间件团队参考Kafka思想,用Java语言实现的消息传输系统优点:1、较高性能,单机写入TPS单实例约7万条/秒2、容错,多种集群模式、可以解决容错问题3、消息重试发送4、顺序消息可以严格执行缺点:1、消息重复、消费端需要做去重操作2、5 选用结论从项目业务与团队技术偏向考虑,我们应该需要一种数据安全性比较高,保证每个消息都会被执行;有容错机制、支持集群模式高可用;性能不错,可以在毫秒级处理消息;支持顺序消息的消息中间件,RockerMq 可以满足这些要求。
3、RockerMq简介3、1 RockerMq 产品介绍参考阿里公司提供的《RocketMQ 开发指南》,最新版针对v3.2.43、2 RockerMq集群3、2、1 部署方式Rockermq共有四种部署方式,分别是:1、单个Master一旦Broker 重启或者宕机时,会导致整个服务不可用2、多Master 模式一个集群无Slave,全是Master,例如2 个Master 戒者3 个Master优点:1、配置简单,2、容错,单个Master 宕机或重启维护对应用无影响,在磁盘配置为RAID10 时,即使机器宕机不可恢复情况下,由于RAID10 磁盘非常可靠,在同步刷盘时消息不会丢,异步刷盘丢失少量消息,3、性能最高。
3、多Master 多Slave 模式,异步复制每个Master 配置一个或多个Slave,有多对Master-Slave,HA(高可用集群)采用异步复制方式,主备有短暂消息延迟,毫秒级。
优点:1、即使磁盘损坏,消息丢失的非常少,消息实时性不会被影响,因为Master 宕机后,消费者仍然可以从Slave 消费,此过程对应用透明。
不需要人工干预。
性能同多Master 模式几乎一样。
缺点:1、Master宕机,磁盘损坏时,因为主备有短暂消息延迟,未复制到slave的消息会丢失。
2、目前master宕机后,备机不能自动切换为主机。
只有master可以接收消息,若所有master宕机,将不能接收消息4、多Master 多Slave 模式,同步双写每个Master 配置一个或多个Slave,有多对Master-Slave,HA 采用同步双写方式,主备都写成功,才返回成功。
优点:数据与服务都无单点,Master 宕机情冴下,消费者可以从slave消费、消息无延迟,服务可用性与数据可用性都非常高缺点:1、性能比异步复制模式略低,収送单个消息的RT(返回时间)会略高。
2、目前master宕机后,备机不能自动切换为主机。
只有master可以接收消息,若所有master宕机,将不能接收消息选用结论由于我们需要保证消息中间件的高可用性,消息不丢失、消息无延迟,所以我们选择“多Master多Slave模式,同步双写”模式。
并且选择同步刷盘。
3、2、2 多Master多Slave模式多master多slave模式网络结构图主要组件有:Name Server、Broker、Producer、Consumer1、Name Server是一个几乎无状态节点,可集群部署,节点之间无信息同步、记录Topic 路由信息。
2、Broker分为Master和Slave,一个Master 可以对应多个Slave,但是一个Slave只能对应一个Master。
3、Producer与Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从Name Server获取Topic 路由信息,并向提供Topic服务的Master 建立长连接,定时向Master 发送心跳。
Producer只可以向Master发送消息。
Producer 完全无状态,可集群部署。
4、Consumer与Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从Name Server获取Topic路由信息,并与提供T opic服务的Master、Slave建立长连接,并定时向Master、Slave収送心跳。
Consumer既可以从Master 订阅消息,也可以从Slave 订阅消息,订阅规则由Broker配置决定3、3 集群搭建linux 环境下部署rocketMq多master多slave模式、同步双写模式集群,暂定为2个master,2个slave3、3、1 安装条件4台linux服务器、分为master-a、slave-a ; master-b、slave-b服务器防火墙开启9876,10911lokkit -p 9876:tcp -p 10911:tcp服务器支持wget命令服务器安装jdk,不低于使用的rocketMq的支持版本3、3、2 安装步骤4台linux服务器、分为master-a、slave-a ; master-b、slave-b假设ip分别为:master-a =10.1.236.1slave–a =10.1.236.2master-b =10.1.236.3slave-b =10.1.236.43、3、2、1 master-a1 从github下载RocketMQ安装包或源码自编译安装wget2 解压缩、并创建数据、日志目录tar –xvf alibaba-rocketmq-3.2.2.tar.gz3 配置环境变量:系统变量:Vi /etc/profile或者修改当前用户的环境变量例如:export ROCKETMQ_HOME=/opt/RocketMQ/alibaba-rocketmqexport PATH=${PATH}:${ROCKETMQ_HOME}/binsource 命令是环境变量生效4 修改mq集群的master-a 配置修改文件$ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties不是强制必须使用这个文件,使用者可以自行定义# brokerClusterName=DefaultClusterbrokerName=broker-a #归属master-slave组的名字brokerId=0 #0表示为master-slave组中为masternamesrvAddr=10.1.236.1:9876;10.1.236.2:9876;10.1.236.3:9876;10.1.236.4:9876 #nameserv defaultTopicQueueNums=4autoCreateTopicEnable=trueautoCreateSubscriptionGroup=truelistenPort=10911 #Broker 对外服务的监听端口deleteWhen=04=120maped=1073741824maped=destroyMaped=120000redeleteHanged=120000diskMaxUsedSpaceRatio=88storePathRootDir=/opt/RocketMQ/alibaba-rocketmq/data #数据目录storePathCommitLog=/opt/RocketMQ/alibaba-rocketmq/logs #日志目录maxMessageSize=65536flushCommitLogLeastPages=4flushConsumeQueueLeastPages=2flushCommitLogThoroughInterval=10000flushConsumeQueueThoroughInterval=60000checkTransactionMessageEnable=falsesendMessageThreadPoolNums=128pullMessageThreadPoolNums=128brokerRole=SYNC_MASTER #角色同步双写MasterflushDiskType=SYNC_FLUSH #同步刷盘brokerIP1=10.1.236.1 #本机IP地址,多网卡易出错,请手工指定其他配置请参考《RocketMQ 开发指南》,最新版针对v3.2.45 启动mq集群的master-a跳转到RocketMQ的bin目录下>cd $ROCKETMQ_HOME/bin>nohup sh mqnamesrv &>nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties &3、3、2、2 slave-a1从github下载RocketMQ安装包或源码自编译安装wget2 解压缩、并创建数据、日志目录tar –xvf alibaba-rocketmq-3.2.2.tar.gz3 配置环境变量例如:export ROCKETMQ_HOME=/opt/RocketMQ/alibaba-rocketmqexport PATH=${PATH}:${ROCKETMQ_HOME}/binsource 命令是环境变量生效4修改mq集群的slave-a 配置修改文件$ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties不是强制必须使用这个文件,使用者可以自行定义、只要保证配置文件内的brokerName 正确即可# brokerClusterName=DefaultClusterbrokerName=broker-a #归属master-slave组的名字brokerId=1 #1表示在master-slave组中为slavenamesrvAddr=10.1.236.1:9876;10.1.236.2:9876;10.1.236.3:9876;10.1.236.4:9876 defaultTopicQueueNums=4autoCreateTopicEnable=trueautoCreateSubscriptionGroup=truelistenPort=10911 #对外端口deleteWhen=04=120maped=1073741824maped=destroyMaped=120000redeleteHanged=120000diskMaxUsedSpaceRatio=88storePathRootDir=/aifs01/users/tstusr12/opt/RocketMQ/alibaba-rocketmq/data #数据存放storePathCommitLog=/aifs01/users/tstusr12/opt/RocketMQ/alibaba-rocketmq/logs #日志存放maxMessageSize=65536flushCommitLogLeastPages=4flushConsumeQueueLeastPages=2flushCommitLogThoroughInterval=10000flushConsumeQueueThoroughInterval=60000checkTransactionMessageEnable=falsesendMessageThreadPoolNums=128pullMessageThreadPoolNums=128brokerRole=SLAVE #角色SlaveflushDiskType=SYNC_FLUSH # 同步刷盘brokerIP1=10.1.236.2 #本机ip,多网卡,建议自定义其他配置请参考《RocketMQ 开发指南》,最新版针对v3.2.45 启动mq集群的slave-a跳转到RocketMQ的bin目录下>cd $ROCKETMQ_HOME/bin>nohup sh mqnamesrv &>nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties &3、3、2、3 master-b1 从github下载RocketMQ安装包或源码自编译安装wget2 解压缩、并创建数据、日志目录tar –xvf alibaba-rocketmq-3.2.2.tar.gz3 配置环境变量例如:export ROCKETMQ_HOME=/opt/RocketMQ/alibaba-rocketmqexport PATH=${PATH}:${ROCKETMQ_HOME}/binsource 命令是环境变量生效4 修改mq集群的master-b配置修改文件$ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties不是强制必须使用这个文件,使用者可以自行定义# brokerClusterName=DefaultClusterbrokerName=broker-b #归属master-slave组的名字brokerId=0 #0表示为master-slave组中为masternamesrvAddr=10.1.236.1:9876;10.1.236.2:9876;10.1.236.3:9876;10.1.236.4:9876 #nameserv defaultTopicQueueNums=4autoCreateTopicEnable=trueautoCreateSubscriptionGroup=truelistenPort=10911 #Broker 对外服务的监听端口deleteWhen=04=120maped=1073741824maped=destroyMaped=120000redeleteHanged=120000diskMaxUsedSpaceRatio=88storePathRootDir=/opt/RocketMQ/alibaba-rocketmq/data #数据目录storePathCommitLog=/opt/RocketMQ/alibaba-rocketmq/logs #日志目录maxMessageSize=65536flushCommitLogLeastPages=4flushConsumeQueueLeastPages=2flushCommitLogThoroughInterval=10000flushConsumeQueueThoroughInterval=60000checkTransactionMessageEnable=falsesendMessageThreadPoolNums=128pullMessageThreadPoolNums=128brokerRole=SYNC_MASTER #角色同步双写MasterflushDiskType=SYNC_FLUSH #同步刷盘brokerIP1=10.1.236.3 #本机IP地址,多网卡易出错,请手工指定其他配置请参考《RocketMQ 开发指南》,最新版针对v3.2.45 启动mq集群的master-b跳转到RocketMQ的bin目录下>cd $ROCKETMQ_HOME/bin>nohup sh mqnamesrv &>nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties &3、3、2、4 slave-b1从github下载RocketMQ安装包或源码自编译安装wget2 解压缩、并创建数据、日志目录tar –xvf alibaba-rocketmq-3.2.2.tar.gz3 配置环境变量例如:export ROCKETMQ_HOME=/opt/RocketMQ/alibaba-rocketmqexport PATH=${PATH}:${ROCKETMQ_HOME}/binsource 命令是环境变量生效4修改mq集群的slave-a 配置修改文件$ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties不是强制必须使用这个文件,使用者可以自行定义、只要保证配置文件内的brokerName 正确即可# brokerClusterName=DefaultClusterbrokerName=broker-b #归属master-slave组的名字brokerId=1 #1表示在master-slave组中为slavenamesrvAddr=10.1.236.1:9876;10.1.236.2:9876;10.1.236.3:9876;10.1.236.4:9876 defaultTopicQueueNums=4autoCreateTopicEnable=trueautoCreateSubscriptionGroup=truelistenPort=10911 #对外端口deleteWhen=04=120maped=1073741824maped=destroyMaped=120000redeleteHanged=120000diskMaxUsedSpaceRatio=88storePathRootDir=/aifs01/users/tstusr12/opt/RocketMQ/alibaba-rocketmq/data #数据存放storePathCommitLog=/aifs01/users/tstusr12/opt/RocketMQ/alibaba-rocketmq/logs #日志存放maxMessageSize=65536flushCommitLogLeastPages=4flushConsumeQueueLeastPages=2flushCommitLogThoroughInterval=10000flushConsumeQueueThoroughInterval=60000checkTransactionMessageEnable=falsesendMessageThreadPoolNums=128pullMessageThreadPoolNums=128brokerRole=SLAVE #角色SlaveflushDiskType=SYNC_FLUSH # 同步刷盘brokerIP1=10.1.236.4 #本机ip,多网卡,建议自定义其他配置请参考《RocketMQ 开发指南》,最新版针对v3.2.45 启动mq集群的slave-b跳转到RocketMQ的bin目录下>cd $ROCKETMQ_HOME/bin>nohup sh mqnamesrv &>nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties &4、MQ 消息服务接口实现4.1、流程图 消费端应用消息中间件MQ 服务器Http 请求发送消息消息发送至服务器监听消息并拉取消息通过backurl 将消息推送至消费端返回发送结果4.2、消息中间件接口规范此服务接口以dubbo提供的restful协议对外提供发送消息服务,并通过backurl回调消费端把消息推送给消费者,使用此服务可以通过http post请求的方式,消费端要提供接受消息的http协议的post接口。