RocketMQ--(三)消息重试

本文介绍RocketMQ消息系统的消费者与生产者工作原理,包括消息发送与接收流程、消息重试机制及消息分发策略。还讨论了不同消费模式的特点,如广播模式与集群模式的区别,并对比了同步双写与异步复制的不同。

1.

一定要先启动Consumer端,在启动Producer端,如果消息拉取失败的话将会个1s.2s.5s.重新拉取,直到获取成功为止,

 

工作中如果长时间拉取失败的处理办法,当重试达到规定 的次数后,记录日志操纵数据库

 

 

小记:只要Consumer没有返回

return ConsumeConcurrentlyStatus.RECONSUME_LATER;


return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;

rocketmq就认为没有到达消费端节点

 

 

2. 有两个Consumer端订阅的是同一个Queen和tab,现在直发送一条数据,消息被Consumer1收到了,但是没有做返回处理或者是Consumer1节点宕机了,那么MQ会重试这个消息给Consumer2

 

3.有一个Producer发送了10条数据,现在MQ为双Master模式,在管控台可以看到BrokerA收到了6条,BrokerB收到了4条。现在我关闭BrokerA节点,启动一个Consumer节点,那么之后得到4条数据,在开启BrokerA节点后收到BrokerA节点上的6条数据

关闭broker命令: sh mqshutdown broker

小记:Consumer消费的方式

    

 

  广播:每个Consumer都收到一份消息

            比如Producer发送了10条数据,那么每一个Consumer都收到10条消息

       集群:每个Consumer均分收到消息

 

 

小记:同步双写和异步复制的概念

同步双写:有一主一从两个节点,Producer发送数据的时候必须主从节点都写入后返回生效

异步复制:有一主一从两个节点,Producer发送数据的时候只要从节点写入后返回生效

异步复制效率高于同步双写,消息原子性低于同步双写

 

 

 

刷盘方式:是以上截图中,commitlog 和 consumberqueue的关系

在Node.js中使用RocketMQ客户端库,通常推荐使用社区或官方提供的适配器。虽然RocketMQ的原生客户端是基于Java的,但可以通过一些Node.js的绑定库来实现Node.js应用与RocketMQ的交互。以下是关于Node.js中使用RocketMQ客户端库的一些关键信息和使用指南: ### 安装与依赖 首先,需要确保Node.js环境已经正确配置。RocketMQ的Node.js客户端库通常依赖于本地库(如C/C++编写的库),因此在安装过程中可能需要编译这些依赖。常见的安装方式是通过`npm`包管理器进行安装。例如,可以使用`rocketmq-client-node`等第方库[^1]。 ```bash npm install rocketmq-client-node ``` ### 初始化生产者与消费者 初始化生产者时,需要指定Name Server地址和生产者组名。生产者用于发送消息RocketMQ Broker。 ```javascript const { Producer } = require('rocketmq-client-node'); const producer = new Producer({ namesrvAddr: '127.0.0.1:9876', groupName: 'test-group' }); await producer.start(); ``` 对于消费者,同样需要指定Name Server地址和消费者组名,并且需要订阅特定的主题(Topic)以及可选的标签(Tag)。 ```javascript const { PushConsumer } = require('rocketmq-client-node'); const consumer = new PushConsumer({ namesrvAddr: '127.0.0.1:9876', groupName: 'test-group' }); await consumer.subscribe('test-topic', '*'); await consumer.registerMessageListener(async (msg) => { console.log(`Received message: ${msg.body.toString()}`); return Promise.resolve(); }); await consumer.start(); ``` ### 发送与接收消息 发送消息时,可以构造一个`Message`对象,指定主题、标签和消息体,然后调用生产者的`send`方法。 ```javascript const { Message } = require('rocketmq-client-node'); const msg = new Message('test-topic', 'TagA', Buffer.from('Hello RocketMQ')); await producer.send(msg); ``` 消费者通过注册的消息监听器来处理接收到的消息。监听器函数接收消息对象,并返回一个Promise以指示消息处理完成。 ### 配置与优化 RocketMQ的Node.js客户端提供了多种配置选项,包括但不限于重试机制、线程数、超时设置等。合理配置这些参数可以提高系统的稳定性和性能。 ### 错误处理与日志 在使用RocketMQ客户端的过程中,需要注意错误处理和日志记录。客户端库通常会提供日志输出功能,帮助开发者追踪问题。同时,对于可能出现的异常情况,如网络中断、消息发送失败等,应有相应的处理机制。 ### 总结 通过上述步骤,可以在Node.js项目中集成RocketMQ客户端库,实现高效的消息传递。需要注意的是,具体的API和配置可能会随着库版本的不同而有所变化,因此建议查阅最新的文档获取最准确的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值