RabbitMQ 的延时队列和镜像队列原理与实战

本文深入探讨了RabbitMQ的特性,包括其消息不可靠问题及其解决方案,如Auto Ack与Manual Ack模式。介绍了死信队列的运作方式和Retry Later场景,并提醒在生产环境中使用RabbitMQ时需注意集群和镜像队列的配置,以保证高可用性。
摘要由CSDN通过智能技术生成

将主要围绕以下四个方面进行分享:

  • RabbitMQ特性

  • RabbitMQ中的消息不可靠问题及其解决方案

  • 死信队列

  • 生产环境下使用RabbitMQ应注意的事项

RabbitMQ特性

对于左边的Client Publisher而言,RabbitMQ Server是消息的接收者,也就是消费者。

对于右边的Client Consumer而言,RabbitMQ Server是消息的发送者,也就是生产者。

RabbitMQ Server将消息从Client Publisher传送给Client Consumer,扮演着消息中间商的角色。

RabbitMQ Server负责将Client Publisher传递来的消息持久化,延后地将消息传递给Client Consumer.这样,即使消费者挂掉,RabbitMQ Server也可以存储消息,当消费者重新工作时再将存储的消息传递过去, 从而保证消息不丢失 。

RabbitMQ Server提供了堆积消息的能力。

另外,RabbitMQ Server还具有复制和广播消息的能力。

具体来说,RabbitMQ Server可以将Client Publisher发布的消息分发给多个消费者,比如它能够将特定的消息按照特定的队列分发给特定的消费者。

“特定”指不同消息具有不同的routing key属性,由上图实例,不同的消息生产者生产了具有不同routing key的消息,通过exchange路由器将不同的routing key消息投递到不同队列,从而分发给不同消费者。

RabbitMQ中的消息不可靠问题及其解决方案

消费端消息不可靠问题及其解决方案

实际上,RabbitMQ Server将消息投递给消费者,具有消息不可靠的特点。

具体来说,RabbitMQ Server将消息投递给消费者时会调用套接字的write操作,而write操作的过程是不可靠性的。

在write操作的过程中,Server需要将消息发送到套接字的缓存中,通过网卡转发到链路上,最终到达消费者所在的机器内核的套接字缓存中,由消费者使用套接字的read操作将消息读出来。

即使套接字的write操作成功也无法保证消息可靠,潜在的网络故障可能使消费者接收不到消息。

机器宕机也可能使消息不可靠,即使消息字节流已经到达消费者所在机器,消费者所在机器的宕机也可能使消息无法被即时读取并处理。

另外,即使消费者即时读取消息,内存消息队列中的所有消息也可能因为kill-9操作发生丢失。

这些可能性都直接导致了消息不可靠。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值