当前位置: 首页 > news >正文

RabbitMQ如何确保消息发送 ? 消息接收?

发送方确认机制:

信道需要设置为 confirm 模式,则所有在信道上发布的消息都会 分配⼀个唯⼀ ID 。⼀旦消息被投递到 queue (可持久化的消息需要写⼊磁盘),信道会发送⼀个确认给⽣产者(包含消息唯⼀ ID)。
如果 RabbitMQ 发⽣内部错误从⽽导致消息丢失 ,会发送⼀条 nack(未确认)消息给⽣产者。所有被发送的消息都将被 confirm(即 ack) 或者被nack⼀次 。但是没有对消息被 confirm 的快慢做任何保证, 并且同⼀条消息不会既被 confirm⼜被nack 发送⽅确认模式是异步的 ,⽣产者应⽤程序在等待确认的同时,可以继续发送消息。当确认消息到达⽣产者,⽣产者的回调⽅法会被触发。

ConfirmCallback接⼝:

只确认是否正确到达 Exchange 中,成功到达则回调

ReturnCallback接⼝:

消息失败返回时回调

接收方确认机制:

消费者在声明队列时,可以指定 noAck 参数,当noAck=false时,RabbitMQ会等待消费者显式发回ack信号后才从内存(或者磁盘,持久化消息)中移去消息。否则,消息被消费后会被⽴即删除。

消费者接收每⼀条消息后都必须进⾏确认(消息接收和消息确认是两个不同操作)。只有消费者确认了消息,RabbitMQ 才能安全地把消息从队列中删除


RabbitMQ不会为未ack的消息设置超时时间,它判断此消息是否需要重新投递给消费者的唯⼀依据是消费该消息的消费者连接是否已经断开。这么设计的原因是RabbitMQ允许消费者消费⼀条消息的时间可以很⻓。保证数据的最终⼀致性


如果消费者返回ack之前断开了链接,RabbitMQ 会重新分发给下⼀个订阅的消费者。(可能存在消息重复消费的隐患,需要去重)

 

相关文章:

  • 「Redis」01 NoSQL及Redis概述
  • 数商云SCM管理系统库存管理功能助力新能源汽车企业仓储管理更高效
  • Word控件Spire.Doc 【图像形状】教程(8): 如何借助C#/VB.NET在 Word 中插入艺术字
  • 【Linux】shell命令行简单解释器
  • 融合多策略的萤火虫算法求解多目标优化问题(Matlab代码实现)
  • MacBook Pro 耗电严重的终极解决办法2022年
  • uni-fab彩色图标按钮
  • [附源码]Python计算机毕业设计Django的在线作业批改系统
  • TypeScript入坑
  • eMagin:当月产百万片时,4K MicroOLED成本将不是问题
  • [附源码]Python计算机毕业设计SSM乐多多宠物店网站(程序+LW)
  • JUC系列(五) 读写锁与阻塞队列
  • 2022最新iOS最新打包发布流程
  • 【Android进阶之旅】内存泄漏的危害有哪些?(案例分析)
  • 力扣(LeetCode)895. 最大频率栈(C++)
  • Effective C++条款18:让接口容易被正确使用,不容易被误用
  • ERP系统:帮助企业实现一体化管理
  • Python学习笔记第四十四天(NumPy 统计函数)
  • java计算机毕业设计花卉网站源码+mysql数据库+系统+lw文档+部署
  • Mysql高频面试题(一)
  • Python中将True/False转为1/0的方法
  • Python去掉中间字符的几种方法
  • Python中numpy中的bincount用法
  • Python中numpy添加元素
  • Pycharm中取消SciView输入
  • np.dot()使用方法
  • 机器学习_KMeans聚类算法的学习(Python实现)
  • 机器学习_感知器算法学习(Python实现)
  • LInux下C语言使用epoll实现网络并发
  • 辨识