【RabbitMQ高级功能详解以及常用插件实战】

文章目录

  • 队列
    • 1 、Classic经典队列
    • 2、Quorum仲裁队列

队列

classic经典队列,Quorum仲裁队列,Stream流式队列

1 、Classic经典队列

这是RabbitMQ最为经典的队列类型。在单机环境中,拥有比较高的消息可靠性。

在RabbitMQ中,经典队列是一种非常传统的队列结构。消息以FIFO先进先出的方式存入队列。消息被
Consumer从队列中取出后就会从队列中删除。如果消息需要重新投递,就需要再次入队。这种队列都依靠
各个Broker自己进行管理,在分布式场景下,管理效率是不太高的。并且这种经典队列不适合积累太多的消
息。如果队列中积累的消息太多了,会严重影响客户端生产消息以及消费消息的性能。因此,经典队列主要
用在数据量比较小,并且生产消息和消费消息的速度比较稳定的业务场景。比如内部系统之间的服务调用。

2、Quorum仲裁队列

仲裁队列,是RabbitMQ从3.8.0版本,引入的一个新的队列类型,整个3.8.X版本,也都是在围绕仲裁队列
进行完善和优化。仲裁队列相比Classic经典队列,在分布式环境下对消息的可靠性保障更高。官方文档中表
示,未来会使用Quorum仲裁队列代替传统Classic队列。
Quorum是基于Raft一致性协议实现的一种新型的分布式消息队列,他实现了持久化,多备份的FIFO队
列,主要就是针对RabbitMQ的镜像模式设计的。简单理解就是quorum队列中的消息需要有集群中多半节点
同意确认后,才会写入到队列中。这种队列类似于RocketMQ当中的DLedger集群。这种方式可以保证消息
在集群内部不会丢失。同时,Quorum是以牺牲很多高级队列特性为代价,来进一步保证消息在分布式环境
下的高可靠。
从整体功能上来说,Quorum队列是在Classic经典队列的基础上做减法,因此对于RabbitMQ的长期使用
者而言,其实是会影响使用体验的。

Quorum队列大部分功能都是在Classic队列基础上做减法,比如Nondurable queues表示是非持久化的内存队列。Exclusivity表示独占队列,即表示队列只能由声明该队列的
Connection连接来进行使用,包括队列创建、删除、收发消息等,并且独占队列会在声明该队列的
Connection断开后自动删除。
其中有个特例就是Poison Message handling(处理有毒的消息)。所谓毒消息是指消息一直不能被消费者正
常消费(可能是由于消费者失败或者消费逻辑有问题等),就会导致消息不断的重新入队,这样这些消息就成
为了毒消息。这些读消息应该有保障机制进行标记并及时删除。Quorum队列会持续跟踪消息的失败投递尝
试次数,并记录在"x-delivery-count"这样一个头部参数中。然后,就可以通过设置 Delivery limit参数来定
制一个毒消息的删除策略。当消息的重复投递次数超过了Delivery limit参数阈值时,RabbitMQ就会删除这
些毒消息。当然,如果配置了死信队列的话,就会进入对应的死信队列。
Quorum队列更适合于 队列长期存在,并且对容错、数据安全方面的要求比低延迟、不持久等高级队列更能
要求更严格的场景。例如 电商系统的订单,引入MQ后,处理速度可以慢一点,但是订单不能丢失。
也对应以下一些不适合使用的场景:
1、一些临时使用的队列:比如transient临时队列,exclusive独占队列,或者经常会修改和删除的队列。
2、对消息低延迟要求高: 一致性算法会影响消息的延迟。
3、对数据安全性要求不高:Quorum队列需要消费者手动通知或者生产者手动确认。
4、队列消息积压严重 : 如果队列中的消息很大,或者积压的消息很多,就不要使用Quorum队列。
Quorum队列当前会将所有消息始终保存在内存中,直到达到内存使用极限。

相关推荐

  1. RabbitMQ高级功能详解以及实战

    2023-12-08 09:14:04       37 阅读
  2. idea

    2023-12-08 09:14:04       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 09:14:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 09:14:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 09:14:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 09:14:04       18 阅读

热门阅读

  1. mysql的Altas读写分离(实战配置版)

    2023-12-08 09:14:04       36 阅读
  2. iosapp网站是干什么的呢?

    2023-12-08 09:14:04       32 阅读
  3. Unity 程序运行后的日志信息路径

    2023-12-08 09:14:04       33 阅读
  4. 初学websocket有感-待研究

    2023-12-08 09:14:04       35 阅读
  5. 插件原理与开发

    2023-12-08 09:14:04       44 阅读