RabbitMQ消息队列

2021-12-04  本文已影响0人  谭英智

消息队列提供消息的接收,消息的路由,和消息的发送功能。

它可以为大型系统解耦,提供异步处理能力和工作队列的能力

特性

围绕着消息队列的功能,rabbit mq提供以下特性

协议

Rabbit MQ使用AMQP协议来作为消息队列的协议

AMQP

简介

高级消息队列协议,是一种网络协议

它包括发布者,消费者和消息代理

mq-amqp-simple

发布者向消息队列投递消息

消息的某些属性会被消息代理利用,作为路由的特性,而其他属性会被直接透传给消费者

由于网络是不可靠的,消费者有可能处理失败,AMQP提供一个消息确认的机制,只有消息被确认了,才会从消息队列删除。消息确认可以是自动或者由消费者发送回执确认

某些情况下,消息有可能无法被成功的路由,消息或许返回给发布者并被丢弃,或者如果消息代理执行了延期操作,消息会被放入一个死信队列中

消息路由规则

mq-direct

用于单播

发布者的消息携带路由键R,会被发送到所有绑定了路由键R的消费队列

可以实现相同路由键R的消费者的负载均衡

mq-fanout

用于广播

用于多播,通过路由键和队列来多播

它是直连交换的另一种模式

不同之处是直连交换只通过路由键来路由

而头交换则通过更多自定义的头属性,来路由消息

队列

队列需要被声明(declare)后才能被使用

队列可以被多次声明,但如果声明的参数不一致,会返回错误

消费者

消费有两种模式:

拒绝消息

当消费者消费某条消息失败后,可以发送拒绝消息给消息代理

消息代理或许把消息销毁或者再次投入消息队列

预取消息

多个消费者共享一个队列的案例中,可以配置在收到一个消息确认后,每个消费者可以接收多少条消息

它可以提高系统的吞吐量

消息

连接

通过TCP SSL来保护连接

通道

每个线程都开一个连接是不高效的

可以为整个应用开一个channel

各个线程通过共享这个channel的连接,来提升连接的利用率

脑裂问题

当部署了两个节点的rabbitmq的时候,如果这两个节点的网络不通或者不稳定的时候,两个节点会自动选举自己为master,并且各自工作。

等网络重新变好时,两个节点不会重新成为集群,并造成消息消费异常,需要手工解决

自动解决的方法:

配置 cluster_partition_handling为以下的一种模式

丢数据问题

解决方法

引用:

http://rabbitmq.mr-ping.com/

上一篇下一篇

猜你喜欢

热点阅读