rabbit mq 配置要点
rabbit mq是一款基于AMQP协议(Advanced Message Queuing Protocol - 高级消息队列协议)的消息队列。
生产者与消费者之间是通过Broker建立连接,在实际的项目中,他们是通过exchange和queue联系在一起的
生产者发送消息流程:
1、生产者和Broker建立TCP连接;
2、生产者和Broker建立通道;
3、生产者通过通道消息发送给Broker,由Exchange将消息进行转发;
4、Exchange将消息转发到指定的Queue(队列)。
消费者接收消息流程:
1、消费者和Broker建立TCP连接;
2、消费者和Broker建立通道;
3、消费者监听指定的Queue(队列);
4、当有消息到达Queue时Broker默认将消息推送给消费者;
5、消费者接收到消息;
6、ack回复。
Exchange 配置细节
虚拟机和名字可以自行勾选与命名;
路由type的模式选择
直接交换器(Direct Exchange): 直接交换器是最简单的交换器类型,它将消息路由到与消息中的路由键(routing key)完全匹配的队列。在创建绑定时,需要指定队列和交换器之间的路由键。
主题交换器(Topic Exchange): 主题交换器根据通配符匹配规则将消息路由到一个或多个队列。通配符可以使用 *(匹配一个单词)和 #(匹配零个或多个单词)。生产者在发送消息时指定一个路由键,交换器根据绑定的路由键和主题规则将消息路由到相应的队列。
扇形交换器(Fanout Exchange): 扇形交换器将消息广播到所有绑定到该交换器的队列中。它忽略路由键,只需将消息发送到与交换器绑定的所有队列即可。Fanout Exchange也就是我们通常说的广播或者发布与订阅模式。
队列Queue的配置
class(经典)队列和Quorum(仲裁)队列对比
Quorum是基于Raft(多数确认)一致性协议实现的一种新型的分布式消息队列,他实现了持久化,多备份的FIFO队列,主要就是针对RabbitMQ的镜像模式设计的。简单理解就是quorum队列中的消息需要有集群中多半节点同意确认后,才会写入到队列中。这种队列类似于RocketMQ当中的DLedger集群。这种方式可以保证消息在集群内部不会丢失。同时,Quorum是以牺牲很多高级队列特性为代价,来进一步保证消息在分布式环境下的高可靠。
从官方这个比较图就能看到,Quorum队列大部分功能都是在Classic队列基础上做减法,比如Non-durable queues表示是非持久化的内存队列。Exclusivity表示独占队列,即表示队列只能由声明该队列的Connection连接来进行使用,包括队列创建、删除、收发消息等,并且独占队列会在声明该队列的Connection断开后自动删除。
其中有个特例就是这个Poison Message(有毒的消息)。所谓毒消息是指消息一直不能被消费者正常消费(可能是由于消费者失败或者消费逻辑有问题等),就会导致消息不断的重新入队,这样这些消息就成为了毒消息。这些读消息应该有保障机制进行标记并及时删除。Quorum队列会持续跟踪消息的失败投递尝试次数,并记录在"x-delivery-count"这样一个头部参数中。然后,就可以通过设置 Delivery limit参数来定制一个毒消息的删除策略。当消息的重复投递次数超过了Delivery limit参数阈值时,RabbitMQ就会删除这些毒消息。当然,如果配置了死信队列的话,就会进入对应的死信队列。
**Quorum队列更适合于 队列长期存在,并且对容错、数据安全方面的要求比低延迟、不持久等高级队列更能要求更严格的场景。**例如 电商系统的订单,引入MQ后,处理速度可以慢一点,但是订单不能丢失。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!