RocketMq消息队列实施方案-完整版

合集下载

rocketmq 工作流程

rocketmq 工作流程

rocketmq 工作流程RocketMQ是阿里巴巴集团开源的一款分布式消息中间件,它具有高可靠、高性能、可扩展的特点,被广泛应用于解决大规模分布式系统中的消息通信问题。

本文将从RocketMQ的工作流程方面进行介绍。

RocketMQ的工作流程可以分为生产者、消息队列、消费者三个主要部分。

生产者负责向消息队列发送消息,消息队列负责存储和分发消息,消费者负责从消息队列中获取消息并进行处理。

生产者将消息发送到RocketMQ的消息队列中。

生产者首先需要与RocketMQ的NameServer进行连接,NameServer负责维护消息队列的元数据信息。

生产者在与NameServer建立连接后,会根据指定的Topic将消息发送到特定的消息队列中。

每个Topic可以分为多个队列,这些队列可以分布在不同的Broker上。

生产者发送消息时,可以选择同步发送或异步发送。

同步发送是指生产者发送消息后会等待消息发送结果,而异步发送则是生产者发送消息后不会等待发送结果。

发送消息时,生产者可以指定消息的Tag、Key 和延迟级别等属性。

消息队列接收到生产者发送的消息后,会将消息存储在磁盘上,并返回一个消息ID给生产者。

消息队列会根据消息的Tag、Key等属性将消息分发到不同的队列中,以便消费者能够根据自己的需求进行消费。

消费者从RocketMQ的消息队列中获取消息进行消费。

消费者首先需要与NameServer进行连接,获取消息队列的元数据信息。

然后,消费者根据指定的Topic和消费者组进行订阅。

消费者可以选择顺序消费或并发消费。

顺序消费是指消费者按照消息的顺序进行消费,而并发消费则是消费者可以同时消费多个消息。

消费者可以根据自己的需求选择适合的消费模式。

消费者从消息队列中获取消息后,会对消息进行处理。

处理的逻辑可以根据业务需求进行编写,比如对消息进行解析、计算、存储等操作。

消费者处理完消息后,可以选择提交消费结果或者回滚消费。

Python:Rocketmq消息队列使用

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中发送。

python实现的消息队列RocketMQ客户端使用

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消息队列实施方案_完整版

消息队列实施方案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 集群的支持,Topic通常需要人工来创建,部署和维护较一般消息队列成本更高定位于日志传输、存在消息丢失的肯能、消息乱序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、性能最高。

rocketmq 事务消息实现原理

rocketmq 事务消息实现原理

rocketmq 事务消息实现原理RocketMQ提供了基于事务的消息发送功能,可以保证消息的原子性操作,即要么所有消息都能够发送成功,要么全部失败。

下面介绍一下RocketMQ事务消息的实现原理。

1. 事务消息的概念RocketMQ的事务消息指的是一组消息,其中包含了多条待发送的消息。

当这组消息被发送时,如果其中任何一条消息发送失败,则整个事务都会被回滚,即所有消息都会被取消发送。

2. 事务消息的发送过程RocketMQ的事务消息发送过程可以分为以下几个步骤:- 发送消息:首先,生产者将要发送的消息发送到RocketMQ的事务消息队列中。

- 消息确认:RocketMQ事务消息队列接收到消息后,会向生产者发送一个确认消息,表示该消息已经被接收。

- 发送事务消息:生产者收到确认消息后,会将所有待发送的消息打包成一个事务消息,并发送给RocketMQ的事务消息服务。

- 事务消息的处理:RocketMQ的事务消息服务会将事务消息发送给所有的Broker节点,并等待所有Broker节点的响应。

如果所有Broker 节点都能够成功接收到事务消息,则事务消息服务会将该事务消息发送给所有的Broker节点。

- 消息确认:当所有的Broker节点都成功接收到事务消息后,RocketMQ的事务消息服务会向生产者发送一个事务消息确认消息,表示该事务消息已经被成功发送。

- 事务消息的回滚:如果在任何时候出现了问题,例如某个Broker节点无法接收到事务消息,或者某个Broker节点无法成功存储消息,则RocketMQ的事务消息服务会将该事务消息回滚,即所有待发送的消息都会被取消发送。

3. 事务消息的实现原理RocketMQ的事务消息实现原理主要依赖于两阶段协议(2PC),以及RocketMQ的消息存储机制。

- 2PC协议2PC协议是一种用于协调参与者和协调者之间的事务提交和回滚的协议。

在RocketMQ的事务消息实现中,生产者扮演协调者的角色,而Broker节点则扮演参与者的角色。

消息队列的设计方案

消息队列的设计方案

消息队列的设计⽅案构建消息队列的整体思路设计消息队列的整体思路是先创建⼀个整体的数据流,例如producer发送给broker,broker发送给consumer,consumer回复消费确认,broker删除/备份消息等。

利⽤RPC将数据流串起来。

然后考虑RPC的⾼可⽤性,尽量做到⽆状态,⽅便⽔平扩展。

之后考虑如何承载消息堆积,然后在合适的时机投递消息,⽽处理堆积的最佳⽅式,就是存储,存储的选型需要综合考虑性能/可靠性和开发维护成本等诸多因素。

为了实现⼴播功能,我们必须要维护消费关系,可以利⽤zookeeper/config server等保存消费关系。

当然也并⾮每个消息队列的设计都是有broker的,broker(消息队列的服务端)的作⽤是对消息进⾏转存,以便在更合适的时间进⾏投递。

消息队列的基本功能的实现1.RPC通信协议其实消息队列⽤接地府⼀点的话来讲,就是将⽣产者producer产⽣发送给consumer消费者的⼀次RPC,先⾏发送到了消息队列中做暂存,再由消息队列在⼀个合适的时间发送给消费者进⾏消费,这样,⼀次RPC便被转为了两次的RPC,所以我们必须使⽤/⾃⼰实现⼀个RPC框架,⾃⼰实现RPC框架如果并⾮是对性能的极致追求,属实是没有必要的(⽽且个⼈实现的效果估计很难达到已有的成熟实现的⽔平),⽽已经有的RPC框架可以使⽤:Dubbo或者Thrift等成熟的实现。

2.对消息的存储(存储⼦系统的选择)为了满⾜我们错峰/流控/最终可达等⼀系列需求,把消息存储下来,然后选择时机投递就是我们broker的意义。

⽽这个存储⼜可以分为持久化和⾮持久化两种⽅式,持久化能更⼤程度地保证消息的可靠性(不易失)并且⼀般情况下可⽤存储空间都⽐较⼤(外存显然会⽐内存的存储容量⼤)。

但是很多消息对于投递性能的要求⼤于可靠性的要求,且数量极⼤(如⽇志)。

此时我们也可⽤⾮持久化的⽅式,将其缓存在内存,然后进⾏投递。

rocketmq工作流程

rocketmq工作流程

rocketmq工作流程RocketMQ是一个基于Java编写的开源消息队列系统。

它是由阿里巴巴集团开发的,主要用于可靠的异步通信、高扩展性以及分布式架构。

RocketMQ工作流程RocketMQ主要分为Producer范畴和Consumer范畴,Producer负责消息发送,而Consumer负责接收消息。

下面将详细介绍RocketMQ 的工作流程:1、Producer将消息发送到BrokerProducer将消息发送到RocketMQ集群。

RocketMQ集群中所有的Broker节点都可以接收消息,然后分发给对应的Consumer。

2、Broker存储消息Broker节点收到Producer发送的消息后,会存储到本地硬盘消息存储区中。

在存储消息的时候,会根据消息的主题(Topic)和标签(Tag)进行分类和存储。

3、Consumer订阅消息Consumer通过指定主题和标签来订阅消息。

当有新消息到达时,Broker会根据订阅关系将消息推送给对应的Consumer。

4、Broker将消息推送给Consumer当Broker将消息推送给Consumer时,会根据Consumer拉取消息的类型来选择消息推送方式:- Push模式:Broker直接将消息推送到Consumer客户端,由客户端来接收和处理消息。

- Pull模式:Broker通知Consumer有新消息,等待Consumer客户端主动来拉取消息。

由客户端主动拉取和处理消息。

5、Consumer消费消息Consumer接收到消息后,会进行相应的处理。

处理结束后,Consumer向Broker发送确认消息,表示该消息已经被处理完毕。

6、Broker删除确认消息Broker收到确认消息后,会将该消息从本地存储区删除。

这样,下次推送消息的时候,就不会再推送已经被处理完的消息了。

总结一下,RocketMQ的工作流程就是Producer发送消息到Broker,Broker存储消息,Consumer订阅消息,Broker将消息推送给Consumer,Consumer消费消息,Broker删除确认消息。

关于消息队列的使用方法(RocketMQ)

关于消息队列的使用方法(RocketMQ)

关于消息队列的使⽤⽅法(RocketMQ)⼀、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应⽤解耦,异步消息,流量削锋等问题,实现⾼性能,⾼可⽤,可伸缩和最终⼀致性架构。

⽬前使⽤较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ⼆、消息队列应⽤场景以下介绍消息队列在实际应⽤中常⽤的使⽤场景。

异步处理,应⽤解耦,流量削锋和消息通讯四个场景。

2.1异步处理场景说明:⽤户注册后,需要发注册邮件和注册短信。

传统的做法有两种 1.串⾏的⽅式;2.并⾏⽅式a、串⾏⽅式:将注册信息写⼊数据库成功后,发送注册邮件,再发送注册短信。

以上三个任务全部完成后,返回给客户端。

b、并⾏⽅式:将注册信息写⼊数据库成功后,发送注册邮件的同时,发送注册短信。

以上三个任务完成后,返回给客户端。

与串⾏的差别是,并⾏的⽅式可以提⾼处理的时间假设三个业务节点每个使⽤50毫秒钟,不考虑⽹络等其他开销,则串⾏⽅式的时间是150毫秒,并⾏的时间可能是100毫秒。

因为CPU在单位时间内处理的请求数是⼀定的,假设CPU1秒内吞吐量是100次。

则串⾏⽅式1秒内CPU可处理的请求量是7次(1000/150)。

并⾏⽅式处理的请求量是10次(1000/100)⼩结:如以上案例描述,传统的⽅式系统的性能(并发量,吞吐量,响应时间)会有瓶颈。

如何解决这个问题呢?引⼊消息队列,将不是必须的业务逻辑,异步处理。

改造后的架构如下:按照以上约定,⽤户的响应时间相当于是注册信息写⼊数据库的时间,也就是50毫秒。

注册邮件,发送短信写⼊消息队列后,直接返回,因此写⼊消息队列的速度很快,基本可以忽略,因此⽤户的响应时间可能是50毫秒。

因此架构改变后,系统的吞吐量提⾼到每秒20 QPS。

⽐串⾏提⾼了3倍,⽐并⾏提⾼了两倍。

2.2应⽤解耦场景说明:⽤户下单后,订单系统需要通知库存系统。

传统的做法是,订单系统调⽤库存系统的接⼝。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RocketMq消息队列实施方案-完整版消息队列实施方案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 集群的支持,Topic通常需要人工来创建,部署和维护较一般消息队列成本更高定位于日志传输、存在消息丢失的肯能、消息乱序3、消息发送错误无重试2、4 RocketMQRockerMq 是阿里公司中间件团队参考Kafka 思想,用Java语言实现的消息传输系统优点:1、较高性能,单机写入TPS单实例约7万条/秒2、容错,多种集群模式、可以解决容错问题3、消息重试发送4、顺序消息可以严格执行缺点:1、消息重复、消费端需要做去重操作2、5 选用结论从项目业务与团队技术偏向考虑,我们应该需要一种数据安全性比较高,保证每个消息都会被执行;有容错机制、支持集群模式高可用;性能不错,可以在毫秒级处理消息;支持顺序消息的消息中间件,RockerMq 可以满足这些要求。

都写成功,才返回成功。

优点:数据与服务都无单点,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路由信息,并与提供Topic 服务的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安装包或源码自编译安装wgethttps:///alibaba/RocketMQ/releases/download/v3.2.6/alibaba-rocketmq-3.2.6.tar.gz 2 解压缩、并创建数据、日志目录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/brok er-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=04fileReservedTime=120mapedFileSizeCommitLog=1073741824mapedFileSizeConsumeQueue=50000000destroyMapedFileIntervalForcibly=120000redeleteHangedFileInterval=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.p roperties &3、3、2、2 slave-a1从github下载RocketMQ安装包或源码自编译安装wgethttps:///alibaba/RocketMQ/releases/download/v3.2.2/alibaba-rocketmq-3.2.2.tar.gz2 解压缩、并创建数据、日志目录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/brok er-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=04fileReservedTime=120mapedFileSizeCommitLog=1073741824mapedFileSizeConsumeQueue=50000000destroyMapedFileIntervalForcibly=120000redeleteHangedFileInterval=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安装包或源码自编译安装wgethttps:///alibaba/RocketMQ/releases/download/v3.2.2/alibaba-rocketmq-3.2.2.tar.gz2 解压缩、并创建数据、日志目录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/brok er-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=04fileReservedTime=120mapedFileSizeCommitLog=1073741824mapedFileSizeConsumeQueue=50000000destroyMapedFileIntervalForcibly=120000redeleteHangedFileInterval=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.p roperties &3、3、2、4 slave-b1从github下载RocketMQ安装包或源码自编译安装wgethttps:///alibaba/RocketMQ/releases/download/v3.2.2/alibaba-rocketmq-3.2.2.tar.gz2 解压缩、并创建数据、日志目录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=04fileReservedTime=120mapedFileSizeCommitLog=1073741824mapedFileSizeConsumeQueue=50000000destroyMapedFileIntervalForcibly=120000redeleteHangedFileInterval=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接口。

相关文档
最新文档