当前位置:网站首页>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 认为该消费者繁忙,将不会给该消费者分发更多的消息.



点个在看你最好看

边栏推荐
- 「Redis应用与深度实践笔记」,深得行业人的心,这还不来看看?
- Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)
- [OC学习笔记]属性关键字
- Confluence OGNL注入漏洞复现(CVE-2022-26134)
- 信息学奥赛一本通 1915:【01NOIP普及组】最大公约数与最小公倍数 | 洛谷 P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题
- 这玩意儿都能优化?果然是细节都在魔鬼里。
- Mongo for infrastructure
- LayaBox---TypeScript---变量声明
- 【AGC】增长服务2-应用内消息示例
- 莫队--优雅的暴力
猜你喜欢

SQL行列转换

【HMS core】【ML Kit】机器学习服务常见问题FAQ(二)

ByteArrayInputStream 类源码分析

知识蒸馏2:目标检测中的知识蒸馏

Kettle--MySQL生产数据库千万、亿级数据量迁移方案及性能优化

Hangzhou electric school game 2 1001 2022 Static Query on Tree (Tree + hash table difference chain subdivision

17.机器学习系统的设计

微博广告分布式配置中心的构建与实践(有彩蛋)

Metaverse Web 3.0 和 DeFi大师班

ByteArrayInputStream class source code analysis
随机推荐
Kettle(二):连接SQL Server数据库
数据库系统原理与应用教程(068)—— MySQL 练习题:操作题 90-94(十二):DML 语句练习
LeetCode 952. 按公因数计算最大组件大小
LayaBox---TypeScript---类型推论
18.支持向量机(SVM)的介绍
Network Basics (3) 01-Basic Concepts of Networks - Protocols, Host Addresses, Paths and Parameters of URL Addresses & 127.0.0.1 Local Loopback Address & View URL IP Address and Access Ping Space + URL
LayaBox---TypeScript---枚举
LayaBox---TypeScript---类型兼容性
自动化早已不是那个自动化了,谈一谈自动化测试现状和自我感受……
JVM诊断命令jcmd介绍
银行适用:此文能够突破你的运维流程管理问题
[OC学习笔记]属性关键字
leetcode-547:省份数量
数据库系统原理与应用教程(066)—— MySQL 练习题:操作题 71-81(十):连接查询
Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)
Mysql brush dirty several scenarios and related parameters
mysql刷脏的几种场景以及相关参数
C陷阱与缺陷 第7章 可移植性缺陷 7.2 标识符名称的限制
顺通海关查验预约综合管理系统
Presto 中 lookUp Join的实现