Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RabbitMQ立即确认(可能确认混淆)_Rabbitmq - Fatal编程技术网

RabbitMQ立即确认(可能确认混淆)

RabbitMQ立即确认(可能确认混淆),rabbitmq,Rabbitmq,我正在尝试设置一个工作流,其中生产者向代理发送消息,代理向消费者发送消息,消费者确认返回到同一队列/通道上,生产者将其作为“确认”接收 我的信息来源于: 根据该文档,它应该等待消费者发送ack或nack。但是,在我的测试中,它会立即返回ack(只要它到达代理(RabbitMQ)) 文件说,这将在三种情况下发生: 在basic.return之后立即确认不可路由的强制或即时消息 否则,瞬时消息在排队时即被确认;以及 当持久消息被持久化到磁盘或在每个队列上使用时,将确认持久消息 在调用basicP

我正在尝试设置一个工作流,其中生产者向代理发送消息,代理向消费者发送消息,消费者确认返回到同一队列/通道上,生产者将其作为“确认”接收

我的信息来源于:

根据该文档,它应该等待消费者发送ack或nack。但是,在我的测试中,它会立即返回ack(只要它到达代理(RabbitMQ))

文件说,这将在三种情况下发生:

  • 在basic.return之后立即确认不可路由的强制或即时消息

  • 否则,瞬时消息在排队时即被确认;以及

  • 当持久消息被持久化到磁盘或在每个队列上使用时,将确认持久消息

在调用basicPublish时,我确保将队列设置为持久,并将传递模式设置为2(persisent)。因此,这是一个信息。我还确保已成功路由到队列


这是预期的行为吗?或者我做了一些错误的事情,使其立即确认,而不是等待消费者的确认?

Publisher确认与消费者确认消息的时间无关

当消息被持久化时,代理将发送“发布者确认”

发布者了解使用者是否收到消息的唯一方法是实现某种RPC:


我想知道为什么您需要知道消费者是否收到了消息,因为消息通常是异步的,所以通过等待消费者的接收,您就可以在同步解决方案中打开您的体系结构了

我需要知道消息何时完成处理。我只是使用了一个单独的回复队列。它不是一个阻塞rpc样式,所以我同意。