当前位置:网站首页>The sixteenth issue of eight-part article Balabala said (MQ)
The sixteenth issue of eight-part article Balabala said (MQ)
2022-07-30 18:03:00 【IT Learning Town】

点击上方蓝字关注我们
1
Q:RocketMq使用哪种方式消费消息,pull还是push?
RocketMq提供两种方式:pull和push进行消息的消费.而RocketMq的push方式,本质上也是采用pull的方式进行实现的.That is to say, both methods are essentiallyconsumer轮询从broker拉取消息的.push方式里,consumerEncapsulates the polling process,并注册了MessageListener监听器.When get news poll,便唤醒MessageListener的consumeMessage()来消费,对用户而言,It feels like the message was pushed over.The news has been sentbroker,而brokerwon't take the initiativepush消息,Then the message must be actively pulled by consumers..
如果broker主动推送消息的话有可能push速度快,消费速度慢的情况,那么就会造成消息在consumer端堆积过多,同时又不能被其他consumer消费的情况.而pull的方式可以根据当前自身情况来pull,不会造成过多的压力而造成瓶颈.所以采取了pull的方式.


2
Q:RocketMqHow to deduplicate messages?
我们知道,只要通过网络交换数据,It is impossible to avoid the problem of message duplication caused by unreliable network.比如说RocketMq中,当consumer消费完消息后,Delayed delivery due to network problemsack到broker,brokerwill not delete the currently consumed messages,那么,The message will be repeatedly delivered to the consumer for consumption.虽然rocketMqIt is guaranteed that the same consumer group can only consume once,But it will be repeatedly consumed by different consumer groups,Therefore, this situation of repeated consumption is inevitable.RocketMq本身并不保证消息不重复,This will definitely be due to each judgment,result in compromised performance,So it puts the deduplication operation directly on the consumer side:
1)消费端处理消息的业务逻辑保持幂等性.Then no matter how many duplicate messages come,Can realize the processing results are the same.
2)You can also create a log table,Use the primary key as the primary key table,在处理消息前,先insert表,Do message processing again.This avoids repeated consumption of messages.


3
Q:RocketMQ Broker中的消息被消费后会立即删除吗?
不会,每条消息都会持久化到CommitLog中,每个Consumer连接到Broker后会维持消费进度信息,当有消息消费后只是当前Consumer的消费进度(CommitLog的offset)更新了.


4
Q:RocketMQ消费模式有几种?
消费模型由Consumer决定,消费维度为Topic.
集群消费:
1.一条消息只会被同Group中的一个Consumer消费.
2.多个Group同时消费一个Topic时,每个Group都会有一个Consumer消费到数据.
广播消费:
消息将对一 个Consumer Group 下的各个 Consumer 实例都消费一遍.即即使这些 Consumer 属于同一个Consumer Group ,消息也会被 Consumer Group 中的每个 Consumer 都消费一次.


5
Q:如何让RocketMQ保证消息的顺序消费
首先多个queue只能保证单个queue里的顺序,queue是典型的FIFO,天然顺序.多个queue同时消费是无法绝对保证消息的有序性的.所以总结如下:同一topic,同一个QUEUE,发消息的时候一个线程去发送消息,消费的时候 一个线程去消费一个queue里的消息.


6、
Q:如何确保消息正确地发送至MQ?The receiver consumes the message?
发送方确认模式将信道设置成 confirm 模式(发送方确认模式),则所有在信道上发布的消息都会被指派一个唯一的 ID.
一旦消息被投递到目的队列后,或者消息被写入磁盘后(可持久化的消息),信道会发送一个确认给生产者(包含消息唯一 ID).
如果 RabbitMQ 发生内部错误从而导致消息丢失,会发送一条 nack(notacknowledged,未确认)消息.
发送方确认模式是异步的,生产者应用程序在等待确认的同时,可以继续发送消息.当确认消息到达生产者应用程序,生产者应用程序的回调方法就会被触发来处理确认消息.接收方确认机制消费者接收每一条消息后都必须进行确认(消息接收和消息确认是两个不同操作).只有消费者确认了消息,RabbitMQ 才能安全地把消息从队列中删除.这里并没有用到超时机制,RabbitMQ 仅通过 Consumer 的连接中断来确认是否需要重新发送消息.也就是说,只要连接不中断,RabbitMQ 给了Consumer 足够长的时间来处理消息.保证数据的最终一致性;下面罗列几种特殊情况:
1、如果消费者接收到消息,在确认之前断开了连接或取消订阅,RabbitMQ 会认为消息没有被分发,然后重新分发给下一个订阅的消费者.(可能存在消息重复消费的隐患,需要去重)
2、如果消费者接收到消息却没有确认消息,连接也未断开,则 RabbitMQ 认为该消费者繁忙,将不会给该消费者分发更多的消息.



点个在看你最好看

边栏推荐
- 知识蒸馏2:目标检测中的知识蒸馏
- Metaverse Web 3.0 和 DeFi大师班
- ARC在编译期和运行期做了什么
- 一个 15 年 SAP ABAP 开发人员分享的 SAPGUI 一些个性化设置和实用小技巧试读版
- 开源盛宴ApacheCon Asia 2022即将开幕,精彩不容错过!
- Servo System of Hydraulic Steering Gear Based on Fuzzy PID
- Vulkan与OpenGL对比——Vulkan的全新渲染架构
- 升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
- Dodging ice cream assassins?Crawling ice cream prices through crawlers
- LayaBox---TypeScript---枚举
猜你喜欢

Dodging ice cream assassins?Crawling ice cream prices through crawlers

Servo System of Hydraulic Steering Gear Based on Fuzzy PID

Moralis去中心化Web3应用开发教程

Quickly build an e-commerce platform based on Amazon cloud technology serverless service - performance

Web结题报告

EMC VPLEX VS2 SPS电池更换详细探讨

MySQL【单行函数】

图解LeetCode——11. 盛最多水的容器(难度:中等)

测试行业干了5年,从只会点点点到了现在的测试开发,总算是证明了自己

躲避雪糕刺客?通过爬虫爬取雪糕价格
随机推荐
C陷阱与缺陷 第7章 可移植性缺陷 7.2 标识符名称的限制
针不戳,数据库性能优化八大方案。
测试行业干了5年,从只会点点点到了现在的测试开发,总算是证明了自己
一个 15 年 SAP ABAP 开发人员分享的 SAPGUI 一些个性化设置和实用小技巧试读版
Informatics Olympiad 1915: [01NOIP Popularization Group] Greatest Common Divisor and Least Common Multiple | Luogu P1029 [NOIP2001 Popularization Group] The problem of the greatest common divisor and
PyTorch 猫狗分类源代码及数据集
leetcode-684:冗余连接
LayaBox---TypeScript---类型推论
开源盛宴ApacheCon Asia 2022即将开幕,精彩不容错过!
Moralis去中心化Web3应用开发教程
Leetcode数据库系列题解合集(持续更新)
【AGC】构建服务1-云函数示例
Microsoft Office 2019 software download and installation detailed tutorial!
Prometheus 基本概念
【AGC】增长服务2-应用内消息示例
分布式消息队列平滑迁移技术实战
测试.net文字转语音模块System.Speech
你好好想想,你真的需要配置中心吗?
ESP8266-Arduino编程实例-BMP180气压温度传感器驱动
C陷阱与缺陷 第6章 预处理器