0%

RabbitMQ 消费者确认和发布者确认

总览

  • 为什么需要确认
  • 手动和自动确认模式
  • 确认API[多次确认和重新排队]
  • 连接丢失或通道关闭时自动重新排队
  • 通道预取及其对吞吐量的影响
  • 最常见的客户错误
  • 发布者确认和相关发布者数据安全主题

基础

按照定义,使用消息传递代理(RabbitMQ)的系统是分布式的。由于不能保证发送的消息可以到达对方或者被其成功处理,因此发布者和消费者都需要一种机制来进行传递和处理确认。

从消费者到RabbitMQ的消息确认被称为消息传递协议的确认
对发布者的去人称为发布者确认。两种功能都基于相同的思想,启发于TCP.

这对于 发布者到RabbitMQ,RabbitMQ到消费者的可靠交付都是必不可少的。 他们对于数据安全至关重要。

消费者确认

RabbitMQ 将消息传递给使用者的时候,需要知道何时消息被处理成功。具体逻辑取决于系统。因此这个是应用程序的决策.

确认标识

确认消息,重要的是如何识别确认的消息。

注册 消费者后(订阅),RabbitMQ使用 basic.deliver 方法推送消息。该方法带有传递标签,该标签唯一标识通道上的传递。因此交付标签按通道划分范围

交付标签是单调的正整数,并有客户端库标识,确认交付的客户端库方法将交付标签作为参数

由于传递

  • basic.ack 用于确认
  • basic.nack 用于否定确认
  • basic.reject 用于否定确认,但与basic.nack 相比有一个限制

自动确认模式:

消息视为发送后立即成功传递。这种模式需要权衡更高的吞吐量(只要消费者可以跟上),以降低交付和消费者处理的安全性。此模式通常称为“一劳永逸”。和手动确认模式不同,如果在成功传递前关闭了TCP连接或者通道,则服务器发送的消息将丢失。因此,自动消息确认应该被认为是不安全的,并且不适合所有有负载的工作。

一次确认多个

处理网络流量考虑

欢迎关注我的其它发布渠道