RocketMq消息队列实施方案-完整版
一句话总结mq的工作流程
![一句话总结mq的工作流程](https://img.taocdn.com/s3/m/01f64cfa88eb172ded630b1c59eef8c75ebf954b.png)
一句话总结mq的工作流程
MQ(消息队列)是一种用于实现异步通信的技术,它的工作流程如下:
1. 生产者将消息发送到消息队列中,消息可以是任何形式的数据,如文本、图片、视频等。
2. 消息队列接收到消息后,将其存储在内部的存储空间中,等待消费者处理。
3. 消费者从消息队列中获取消息,可以根据需求选择同步或异步方式进行消费。
4. 消费者处理完消息后,可以选择确认消费成功或放弃消费,如果放弃消费,消息将重新进入队列等待下一次消费。
5. 如果消息队列的存储空间已满,新的消息将被拒绝存储,生产者需要等待空间释放后再发送消息。
6. 消息队列可以支持多个消费者同时消费消息,每个消费者可以独立处理消息,提高系统的并发性能。
7. 消息队列可以通过设置优先级、过期时间等方式对消息进行管理,以满足不同场景下的需求。
8. 消息队列可以实现消息的持久化,即使系统故障或重启,之前的消息也能够保留,确保消息的可靠性和稳定性。
9. 消息队列可以实现消息的广播和订阅,一个消息可以被多个消费者同时接收,实现信息的传递和共享。
10. 消息队列可以实现系统解耦,生产者和消费者之间不直接通信,
通过消息队列进行中转,降低系统的耦合度。
总结:MQ是一种实现异步通信的技术,生产者将消息发送到消息队列中,消费者从队列中获取消息进行处理,通过消息队列可以实现系统解耦、提高并发性能、保证消息的可靠性和稳定性,适用于各种场景下的消息传递和共享。
Python:Rocketmq消息队列使用
![Python:Rocketmq消息队列使用](https://img.taocdn.com/s3/m/030e87ad970590c69ec3d5bbfd0a79563c1ed462.png)
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中发送。
消息队列的使用方法
![消息队列的使用方法](https://img.taocdn.com/s3/m/db3e1807a9956bec0975f46527d3240c8547a15c.png)
消息队列的使用方法消息队列是一种用于在不同的系统和应用程序之间传递和传输数据的中间件。
它使用先入先出(FIFO)的方式存储和分发消息,可以提高系统的可靠性、扩展性和性能。
在实际应用中,消息队列有着广泛的使用场景,包括异步处理、解耦系统组件、削峰填谷、流量控制以及实现可靠的消息传递等。
下面将详细介绍消息队列的使用方法。
1.选择消息队列在开始使用消息队列之前,需要根据实际需求选择适合的消息队列。
常见的消息队列有Kafka、RabbitMQ和ActiveMQ等。
选择时,需要考虑消息的延迟要求、系统的可用性、消息吞吐量等因素。
2.定义消息格式在使用消息队列之前,需要定义消息的格式。
消息的格式应该简洁清晰,包含必要的信息,并考虑消息的扩展性和兼容性。
可以使用JSON、XML或者自定义的消息格式。
3.创建消息生产者消息生产者负责生成和发送消息到消息队列。
在创建消息生产者时,需要指定消息队列的地址和端口,并进行身份验证(如果需要)。
然后,通过消息队列提供的API,将消息发送到指定的队列中。
4.创建消息消费者消息消费者用于接收处理消息队列中的消息。
消费者需要连接到消息队列,并订阅一个或多个队列。
通过注册回调函数,消费者可以在消息到达时对消息进行处理。
5.异步处理消息一般情况下,消息队列的主要优势在于它可以实现异步处理。
消息生产者发送消息之后,可以立即返回,而不需要等待消息被消费者处理。
这种异步处理方式可以提高系统的性能和吞吐量。
6.解耦系统组件消息队列可以将系统中的各个组件解耦,使得它们可以独立运行和扩展。
消息生产者和消费者不需要直接知道对方的存在,它们只需要连接到消息队列即可。
7.削峰填谷消息队列可以用于平滑处理系统中的峰值流量。
当流量高峰到来时,消息队列可以暂时保存消息,等到系统负载下降时再进行消费。
这样可以避免系统因流量突增而崩溃。
8.流量控制通过设置合适的缓冲区大小和消费速率,消息队列可以实现流量控制。
python实现的消息队列RocketMQ客户端使用
![python实现的消息队列RocketMQ客户端使用](https://img.taocdn.com/s3/m/96eeda6b9a6648d7c1c708a1284ac850ad02041c.png)
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-官方中文文档](https://img.taocdn.com/s3/m/1d7ac5a80129bd64783e0912a216147917117ee3.png)
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队列类型](https://img.taocdn.com/s3/m/57b55d7e0a4c2e3f5727a5e9856a561252d321a2.png)
RocketMQ是一种高性能的分布式消息系统,它提供了队列(Queue)这种基本的消息存储方式。
队列是RocketMQ中最基本的消息存储单元,消费者可以从队列中取出消息进行消费。
队列类型的选择和设计是RocketMQ的一个重要部分,因为它影响着系统的吞吐量、稳定性以及消费者与生产者之间的协调方式。
RocketMQ提供了三种队列类型:普通队列(Normal Queue)、优先队列(Priority Queue)和延迟队列(Delay Queue)。
每种队列类型都有其特定的用途和特性。
1. 普通队列(Normal Queue):这是RocketMQ中最基本的队列类型。
消息按照发送的顺序进入队列,消费者可以按照顺序取出消息。
普通队列适用于大多数场景,因为它提供了较好的一致性和可靠性。
然而,由于其无优先级和延迟处理机制,它可能在处理大量消息时性能表现一般。
2. 优先队列(Priority Queue):优先队列为消息提供了优先级机制。
高优先级的消息将先于低优先级的消息被取出和消费。
这种队列类型适用于那些需要优先处理的场景,例如,重要消息需要优先处理以避免错过关键的发送时间。
优先队列在处理高优先级消息时具有较好的性能,但需要注意,如果优先级机制设计不合理,可能会导致低优先级的消息被长时间积压。
3. 延迟队列(Delay Queue):延迟队列允许消费者设置消息的取出时间。
也就是说,消费者可以在指定的时间后从队列中取出延迟的消息。
这种队列类型适用于那些需要延迟处理的场景,例如,一些消息需要在一段时间后才能被消费,或者需要避免在忙碌时消费消息。
延迟队列的性能表现取决于设置的时间,过短的延迟可能会导致消费者的处理压力增大,而过长的延迟则可能使消费者错过关键的消息。
选择哪种队列类型取决于具体的业务需求和系统特性。
RocketMQ的设计者根据不同的场景需求,提供了这三种队列类型,每种类型都有其特定的用途和优势,同时也存在一定的局限性。
rocketmq定时消息原理
![rocketmq定时消息原理](https://img.taocdn.com/s3/m/2669c67d326c1eb91a37f111f18583d049640f08.png)
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消息消费以及进度管理解析](https://img.taocdn.com/s3/m/7ca45499b8d528ea81c758f5f61fb7360a4c2b5c.png)
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。
基于RocketMQ的MQTT消息推送服务器分布式部署方案
![基于RocketMQ的MQTT消息推送服务器分布式部署方案](https://img.taocdn.com/s3/m/9741608f172ded630b1cb6ee.png)
deploym ent of servers.It has the characteristics of high perform ance,high reliability,and high real tim e ability.This
paper introduces the MQTT protocol and the application of RocketMQ,and implements all MQTT protocol message push server based on RocketMQ through the combination of RocketMQ and Mosquitto an d its distributed deployment. Key words:MQTT;RocketMQ;message push server
计 算机 系统 应用 ISSN 1003—3254.CODEN CSAOBN
Computer Systems&Applications,2018,27(6):83—86[doi:10.15888 ̄.cnki.csa.006381】 @中 国科学 院软 件研 究所 版权 所有 .
E-mail:csa@iscas.ac.cn
摘 要:伴 随着互联 网的飞速 发展,特别是在近几 年 中,移动互联 网的发展更为迅猛 .在移动互联 网中,消息推送是 其 中很重要 的一部分,它是手机客户端信 息发布 和通信 的重要方式.MQTT协议是 Android系统 中消息推送 的实现 技术 之一,由于 其具 有低 功耗 、节省流量和可扩展 性强的优点,目前 已得到了众多应用.同时,RocketMQ作为一种 分布 式消息 队列,在服务器分布 式部署上具有很大优 势,具有 高性 能、高可靠 、高实时、分布式特 点.本文介绍 了 MQTT协议与 RocketMQ 的这种开 源项 目的应用,并通 过 RocketMQ与 Mosquitto相结合 的方 式,实现 了一种基 于 RocketMQ的 MQTT消息推送服务器及其分布式部署. 关键词 :MQTT;RocketMQ;消 息推送服务器
rocketmq_messagelistenerconcurrently工作原理
![rocketmq_messagelistenerconcurrently工作原理](https://img.taocdn.com/s3/m/738c1a4f591b6bd97f192279168884868762b8fc.png)
rocketmq messagelistenerconcurrently工作原理1. 引言1.1 概述:本篇文章旨在深入探讨RocketMQ的MessageListenerConcurrently工作原理。
RocketMQ是一种高性能、可靠、可伸缩的分布式消息中间件,被广泛应用于企业级系统中。
而MessageListenerConcurrently是RocketMQ提供的一个重要接口,用于处理并发地消费消息。
1.2 文章结构:文章将按照以下结构展开论述RocketMQ MessageListenerConcurrently的工作原理。
首先,我们将简单介绍RocketMQ和MessageListenerConcurrently 的概念,然后详细阐述MessageListenerConcurrently的工作流程。
接下来,我们将分别讨论两个重点方面,并总结它们的重要性和优势。
最后,我们会展望一下RocketMQ MessageListenerConcurrently未来的发展,并进行总结。
1.3 目的:本文旨在帮助读者更好地理解RocketMQ MessageListenerConcurrently工作原理,并认识到其在分布式消息系统中的重要性和优势。
通过深入了解这一机制,读者可以更好地设计和开发基于RocketMQ的应用程序,并使其能够更加高效地处理大规模并发消息。
同时,对于那些对消息中间件感兴趣或正在使用RocketMQ作为其消息服务组件的读者来说,本文也提供了一种详尽的了解渠道。
2. RocketMQ MessageListenerConcurrently工作原理:2.1 RocketMQ简介RocketMQ是一款开源的分布式消息传递系统,由阿里巴巴集团开发并捐赠给Apache软件基金会。
它具有高可靠性、高性能、强一致性和可伸缩性等特点,被广泛应用于大规模分布式系统中。
2.2 MessageListenerConcurrently概述MessageListenerConcurrently是RocketMQ中一个重要的接口,它允许用户编写自定义的消息监听器来处理从RocketMQ服务器接收到的消息。
rocketmq延迟队列原理
![rocketmq延迟队列原理](https://img.taocdn.com/s3/m/38fdb612366baf1ffc4ffe4733687e21af45ff0d.png)
rocketmq延迟队列原理
RocketMQ提供了一种延迟队列,它是一种特殊的消息队列,可以帮助用户控制消息的发送时间。
使用RocketMQ的延迟队列,用户可以设定消息的发送时间,当发送时间到达之后,消息会进入正常的消息队列,然后进行消费。
RocketMQ的延迟队列的原理很简单,它有两个部分:消息生产者和消息消费者。
消息生产者将消息发送到延迟队列中,在设定的发送时间到达之前,消息不会进入正常的消息队列中,而是存储在延迟队列中。
当消息发送时间到达指定时间之后,消息被系统自动发送到正常的消息队列中,然后消息消费者从消息队列中消费消息。
RocketMQ延迟队列可以解决很多复杂的业务场景,比如定时发送活动等,可以在指定时间将活动信息发送到用户邮件中;延迟队列还可以用来处理实时消息,比如你想在某个时间为某位用户发送实时消息,可以使用延迟队列把消息发送到消息队列,当时间到达指定时间时,消息消费者会把消息发送到用户。
总的来说,RocketMQ的延迟队列可以帮助用户更好的控制消息的发送时间,让用户能够以最佳的效率处理消息,并节省大量的人力和物力成本。
rocketmq的限流方案
![rocketmq的限流方案](https://img.taocdn.com/s3/m/9d413f27c381e53a580216fc700abb68a982ad1a.png)
rocketmq的限流方案RocketMQ的限流方案1. 简介本文介绍了针对RocketMQ消息中间件的限流方案,旨在解决高并发环境下消息处理能力不足的问题。
2. 限流原理RocketMQ的限流方案基于两个主要的原理:1.流量控制:通过限制每个消费者的消费速率,以控制消息的处理能力。
2.负载均衡:通过分区选择算法,将消息均匀地分配给不同的消费者,以提高处理效率。
3. 限流方案以下是针对RocketMQ的限流方案的详细内容:•消息预取为了提高消息处理效率,RocketMQ引入了消息预取机制。
通过提前拉取一定数量的消息到消费者端,可以减少网络通信的开销,提高消费速率。
可以通过调整pullBatchSize参数来控制一次拉取的消息数量。
•限制消息消费速率为了控制每个消费者的消费速率,可以在消费者端设置consumeMessageBatchMaxSize参数,限制每次消费的消息数量。
通过合理设置该参数,可以限制消费速率,防止消费者消费过快。
•增加消费者实例当出现高并发环境下消息处理能力不足的情况时,可以通过增加消费者实例来提高处理效率。
RocketMQ支持水平扩展,可以动态增加消费者实例,以增加消息处理能力。
•负载均衡策略RocketMQ提供了多种负载均衡策略,可以根据实际需求选择合适的负载均衡算法,将消息均匀地分配给不同的消费者实例。
可选的负载均衡策略包括:轮询、随机、哈希、加权轮询等。
•集群消费模式使用集群消费模式可以实现消息负载均衡。
当一个消费者组内有多个消费者实例时,每个实例将平均分摊消息的处理负担,提高整体的处理能力。
•消息重试与延时消费对于消费能力不足的情况,可以通过设置消息的重试次数和延时消费功能来缓解压力。
当一个消息消费失败时,RocketMQ将自动进行消息重试,并支持延时消费功能,设置消息的延时消费时间。
4. 总结本文介绍了针对RocketMQ消息中间件的限流方案。
通过流量控制和负载均衡的原理,采用消息预取、限制消费速率、增加消费者实例、负载均衡策略、集群消费模式、消息重试与延时消费等多种手段,可以有效提高RocketMQ的消息处理能力,在高并发环境下保证系统的稳定性和可靠性。
rocketmq读写队列原理
![rocketmq读写队列原理](https://img.taocdn.com/s3/m/204378880d22590102020740be1e650e52eacfde.png)
rocketmq读写队列原理RocketMQ 读写队列原理概述RocketMQ 是一种分布式消息系统,它使用队列模型来存储和传输消息。
队列按主题进行组织,每个主题可以包含多个队列。
消息生产者将消息写入队列,而消息消费者从队列中读取消息。
队列模型RocketMQ 使用读写分离的队列模型。
该模型将每个队列划分为多个读队列和一个写队列。
读队列:消息消费者从读队列中读取消息。
每个消费者组可以订阅一个主题下的多个读队列。
写队列:消息生产者将消息写入写队列。
写队列保证消息的顺序性,即先写入的消息先被消费。
读队列分配当消费者组订阅一个主题时,RocketMQ 会根据以下规则为消费者分配读队列:如果消费者组只订阅一个队列,则该队列将分配给该组的所有消费者。
如果消费者组订阅了多个队列,则会采用轮询策略将队列分配给该组的消费者。
消息分发消息生产者将消息写入写队列后,RocketMQ 会将消息复制到所有读队列。
当消费者从读队列中读取消息时,只读取当前未被消费的消息。
顺序消息处理RocketMQ 确保消息消费的有序性,通过以下机制实现:消息顺序存储:消息生产者将消息有序写入写队列,这保证了消息的顺序性。
顺序消息复制:写队列将消息顺序复制到所有读队列,保证了消息在读队列中也是顺序的。
消费顺序控制:消费者从读队列中读取消息时,会按照消息的顺序依次消费,从而保证了消息的消费顺序。
负载均衡读写队列模型实现了负载均衡,通过以下方式:多读队列:每个主题可以有多个读队列,将消费负载分布到多个消费者。
轮询分配:消费者组订阅多个队列时,RocketMQ 会采用轮询策略将队列分配给消费者,避免单一消费者过载。
吞吐量优化读写队列模型还优化了系统的吞吐量,通过以下方式:并行消费:多个消费者可以并行从多个读队列中读取消息,提高了整体吞吐量。
批量消费:消费者可以批量消费消息,减少网络开销和时间消耗,提升吞吐量。
总结RocketMQ 读写队列模型是一种高效可靠的消息处理模型,它通过读写分离、顺序消息处理、负载均衡和吞吐量优化等机制,为高性能和高可靠性的消息系统提供了基础。
rocketmq实现延迟队列(精确到秒级)
![rocketmq实现延迟队列(精确到秒级)](https://img.taocdn.com/s3/m/e2db097a7f21af45b307e87101f69e314332faff.png)
rocketmq实现延迟队列(精确到秒级)开源版本中,只有RocketMQ⽀持延迟消息,且只⽀持18个特定级别的延迟付费版本中,阿⾥云和腾讯云上的MQ产品都⽀持精度为秒级别的延迟消息定时消息:Producer将消息发送到消息队列RocketMQ版服务端,但并不期望⽴马投递这条消息,⽽是推迟到在当前时间点之后的某⼀个时间投递到Consumer进⾏消费,该消息即定时消息。
延时消息:Producer将消息发送到消息队列RocketMQ版服务端,但并不期望⽴马投递这条消息,⽽是延迟⼀定时间后才投递到Consumer进⾏消费,该消息即延时消息。
定时消息与延时消息在代码配置上存在⼀些差异,但是最终达到的效果相同:消息在发送到消息队列RocketMQ版服务端后并不会⽴马投递,⽽是根据消息中的属性延迟固定时间后才投递给消费者。
实现原理(4种实现⽅案)1.代理实现2.时间轮和delay-commit-log实现3.时间轮和时间file实现4.基于rocketmq 18个等级来改造适⽤场景定时消息和延时消息适⽤于以下⼀些场景:消息⽣产和消费有时间窗⼝要求,例如在电商交易中超时未⽀付关闭订单的场景,在订单创建时会发送⼀条延时消息。
这条消息将会在30分钟以后投递给消费者,消费者收到此消息后需要判断对应的订单是否已完成⽀付。
如⽀付未完成,则关闭订单。
如已完成⽀付则忽略。
通过消息触发⼀些定时任务,例如在某⼀固定时间点向⽤户发送提醒消息。
使⽤⽅式定时消息和延时消息的使⽤在代码编写上存在略微的区别:发送定时消息需要明确指定消息发送时间点之后的某⼀时间点作为消息投递的时间点。
发送延时消息时需要设定⼀个延时时间长度,消息将从当前发送时间点开始延迟固定时间之后才开始投递。
注意事项定时消息的精度会有1s~2s的延迟误差。
定时和延时消息的msg.setStartDeliverTime参数需要设置成当前时间戳之后的某个时刻(单位毫秒)。
如果被设置成当前时间戳之前的某个时刻,消息将⽴刻投递给消费者。
消息队列RocketMQ并发量十万级
![消息队列RocketMQ并发量十万级](https://img.taocdn.com/s3/m/e2424f8785868762caaedd3383c4bb4cf7ecb71a.png)
消息队列RocketMQ并发量⼗万级⼗年河东,⼗年河西,莫欺少年穷学⽆⽌境,精益求精前天/昨天,搞了整整两天安装RabbitMQ服务端,都是以失败告终。
⼈不能在⼀棵树上吊死,因此,经历不间断的坚持后,果断放弃安装RabbitMQ服务端,转向阿⾥巴巴中间件RocketMQ 。
话说,⽆论从哪⽅⾯说,阿⾥的 RocketMQ 都⽐ RabbitMQ强⼤,毕竟从命名上我们也能看出端倪:兔⼦是⼲不过⽕箭的。
有图为证:吞吐量⼀个是万,⼀个是⼗万,多了⼀个量级。
其实⽹上有很多关于RocketMQ 服务端的安装配置教程,在此,贴出⼀下资源供⼤家使⽤。
1、2、3、4、踩坑记录5、其中第三篇是安装所需要的的资源及扩展插件。
后续:我的RocketMQ采坑记:1、javaJDK请使⽤java1.8,全名为:jdk-8u40-windows-x64.exe,这点很重要,否则你的尝试很可能会失败。
2、⽆论安装Java还是⽤来配置环境变量的⽂件,请放在⼀个没有空格的⽂件夹中,这点很重要。
⽆论你安装RocketMQ 【rocketmq-all-4.2.0-bin-release】、Java1.8,maven-3.6.3、rocketmq-all-4.2.0-bin-release、rocketmq-externals-master 这些⽂件不管是⽤来安装,还是⽤来配置环境变量,请在C盘建⼀个MQ的⽂件夹,把所有⽂件均放在MQ⽂件夹中,上述这些⽂件仅有Java1.8需要安装,也需要安装在MQ⽂件夹下,【例如:安装在:C:\MQ\Java⽬录下】,其他都是⽤来配置环境变量的。
3、rocketmq-externals-master 这个⽂件是⾮必须的,他的作⽤是配合Java⽣成⼀个Java项⽬,即:rocketmq-console-ng-1.0.0.jar,这个⽂件可以通过⽹上进⾏下载,端⼝号默认是8080.4、据说还需要安装GIT,因此,不管真假,请安装GIT。
阿里云的rocketmq用法
![阿里云的rocketmq用法](https://img.taocdn.com/s3/m/944db37af6ec4afe04a1b0717fd5360cba1a8dee.png)
阿里云的rocketmq用法阿里云RocketMQ,是一款具有高可用、高吞吐量、分布式特性的分布式消息中间件。
它具有低延迟、高并发、高可靠、易扩展等特性,被广泛应用于互联网金融、电商、物流、游戏等各个领域。
一、准备工作1、注册登录阿里云账号2、创建RocketMQ实例3、下载RocketMQ客户端代码,通过Maven引用RocketMQ客户端二、消息生产者RocketMQ的消息生产者用于发送消息到RocketMQ服务端,以供消费者去消费。
1、创建消息生产者实例拥有了RocketMQ实例,接下来就可以开始创建生产者:```DefaultMQProducer producer = newDefaultMQProducer("ProducerGroup");producer.setNamesrvAddr("mq-instancerant-primary-cn-beijing.aliyuncs:80");producer.setInstanceName("Producer");producer.start();```参数说明:* ProducerGroup:生产者组名* NameServerAddress:RocketMQ服务端地址* InstanceName:生产者实例名称2、发送消息消息发送是RocketMQ的核心API之一,消息发送API有多种,其中包括同步发送、异步发送、单项发送等方式。
这里仅介绍同步发送方式:```Message message = new Message("TopicTest","TagA","Hello RocketMQ!".getBytes(RemotingHelper.DEFAULT_CHARSET));SendResult sendResult = producer.send(message);System.out.printf("%s%n", sendResult);```参数说明:* Topic:消息主题,是消息的分类标签。
rocketmq延迟队列实现原理
![rocketmq延迟队列实现原理](https://img.taocdn.com/s3/m/6ac0495459fafab069dc5022aaea998fcd224048.png)
rocketmq延迟队列实现原理RocketMQ延迟队列实现原理简介RocketMQ是一种开源的分布式消息中间件,提供了可靠的消息传递和保存等功能。
延迟队列是RocketMQ中的一项重要特性,它可以延迟消息的消费时间,适用于具有时间敏感性的业务场景。
延迟队列的定义延迟队列是指将消息发送到队列中,但并不立即被消费,而是在一定的时间后进行消费的队列。
RocketMQ的延迟队列允许根据消息的属性来设置延迟时间,使得消息可以在指定的时间后被消费。
延迟队列的使用场景延迟队列在一些具有时间敏感性的业务场景中非常有用,比如订单超时未支付取消、定时任务等。
通过延迟队列,我们可以很方便地实现这些功能。
延迟队列的实现原理实现延迟队列主要涉及以下几个步骤:1.首先,消息发送者需要设置消息的延迟时间,并将消息发送到RocketMQ的消息队列中。
2.RocketMQ将延迟消息存储在消息队列中,同时设置一个延迟级别,表示消息的延迟时间。
延迟级别是通过消息的属性来指定的。
3.消息消费者订阅对应的消息队列,并在延迟时间到达后进行消费。
4.RocketMQ的消息消费线程会定期扫描所有延迟消息,并将到期的消息投递给消费者进行消费。
延迟队列的实现方式RocketMQ的延迟队列实现方式有两种:1. 定时任务检查方式这种方式下,RocketMQ会单独维护一个定时任务,并定时检查是否有到期的延迟消息。
具体实现步骤如下:•RocketMQ的延迟消息存储在消息队列的存储文件中,可以通过消息的属性查找到对应的延迟消息。
•定时任务会根据消息的延迟级别,计算出消息的到期时间,并将到期的消息发送给消息消费者进行消费。
•这种方式的优点是实现简单,不需要对消息队列进行大量的遍历操作。
但是,定时任务会占用一定的系统资源,并且定时任务需要定期扫描所有的消息队列,可能会影响系统的性能。
2. 延迟级别方式这种方式下,RocketMQ根据消息的延迟级别,将消息存储到不同的文件中。
RocketMQ消息模型
![RocketMQ消息模型](https://img.taocdn.com/s3/m/51d2cd17fe00bed5b9f3f90f76c66137ee064f47.png)
RocketMQ消息模型rocketmq采⽤的是发布-订阅的模式,不需要每个消费者维护⾃⼰的消息队列,⽣产者将消息发送到topic,消费者订阅此topic 读取消息。
基本概念: 消息模型:消息模型包括producer,consumer,broker三部分。
producer⽣产消息,consumer消费消息,broker存储消息,broker可以是集群部署,其中topic位于broker中 Producer: ⼀般是业务系统为⽣产者,将消息投递到broker,投递消息要经历“请求-确认”机制,确保消息不会在投递过程中丢失。
过程:⽣产者⽣产消息到broker,broker接受消息写⼊topic.之后给⽣产者发送确认相应,如果⽣产者没有收到服务端的确认或者收到失败的响应,则会重新发送消息;在消费端,消费者在收到消息并完成⾃⼰的消费业务逻辑(⽐如,将数据保存到数据库中)后,也会给服务端发送消费成功的确认,服务端只有收到消费确认后,才认为⼀条消息被成功消费,否则它会给消费者重新发送这条消息,直到收到对应的消费成功确认。
Topic:表⽰⼀类消息的集合,每个主题包含若⼲条消息,每条消息只能属于⼀个主题,是RocketMQ进⾏消息订阅的基本单位。
⽣产者组:同⼀类Producer的集合,这类Producer发送同⼀类消息且发送逻辑⼀致。
如果发送的是事物消息且原始⽣产者在发送之后崩溃,则Broker服务器会联系同⼀⽣产者组的其他⽣产者实例以提交或回溯消费。
消费者组:同⼀类Consumer的集合,这类Consumer通常消费同⼀类消息且消费逻辑⼀致。
消费者组使得在消息消费⽅⾯,实现负载均衡和容错的⽬标变得⾮常容易。
要注意的是,消费者组的消费者实例必须订阅完全相同的Topic。
RocketMQ ⽀持两种消息模式:集群消费(Clustering)和⼴播消费(Broadcasting)具体看⼀下消息模型图:1、topic中队列的意义? 1)topic中队列是可配置的,多个队列相当于是负载均衡,将⽣产者投递到该topic中的消息分别加⼊各个队列中,图中为2个队列,即相当于将topic的消息承载体分为两段(即每条消息只会往每个队列⾥发⼀次,在topic中是唯⼀的),这样是为了提供性能,多实例并发⽣产和消费 2)topic中不能保证消息有序,但是在队列中消息有序2、消费者组如何消费? 1)同⼀个消费者组的消费者只能同时有⼀个消费者获取⼀个队列的消息,其他的消费者可以获取其他队列的消息。
rocketmq messagelistenerconcurrently工作原理 -回复
![rocketmq messagelistenerconcurrently工作原理 -回复](https://img.taocdn.com/s3/m/147c95a8afaad1f34693daef5ef7ba0d4a736da7.png)
rocketmq messagelistenerconcurrently工作原理-回复RocketMQ是一个分布式消息队列系统,由阿里巴巴开源并逐渐成为Apache顶级项目。
其具有高吞吐量、高可用性、可水平扩展等特点,非常适用于大规模的分布式系统中。
在RocketMQ中,消息的生产者和消费者之间通过消息队列进行异步通信。
RocketMQ提供了一种名为MessageListenerConcurrently的机制,用于实现消息的并发消费。
本文将从MessageListenerConcurrently 的工作原理入手,详细解析其实现过程。
首先,我们来了解一下什么是MessageListenerConcurrently。
MessageListenerConcurrently是RocketMQ用于消息并发消费的接口,其中定义了一个名为consumeMessage的方法,用来实现消息的处理逻辑。
开发者需要实现该接口,并将其注册到消息消费者中,从而实现消息的并发消费。
在RocketMQ中,由于消息的生产者和消费者可能存在网络延迟、时间差等原因,消息的顺序不能得到保证。
因此,为了实现消息的并发消费,RocketMQ采用了一种多线程的方式。
具体来说,当消息到达消息队列后,消费者线程池会从消息队列中拉取消息,并将其分发给注册的MessageListenerConcurrently实例进行消费。
消息队列会将消息分片并将每个分片分发给不同的消费者线程。
每个消费者线程会调用MessageListenerConcurrently的consumeMessage方法来处理消息。
在处理消息的过程中,MessageListenerConcurrently可以返回ConsumeConcurrentlyStatus枚举,用来表示消息的处理结果。
ConsumeConcurrentlyStatus包括以下几种状态:SUCCESS(成功消费)、RECONSUME_LATER(稍后重试)和SUSPEND_CURRENT_QUEUE_A_MOMENT(暂停当前队列一段时间)。
- 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接口。