RabbitMQ基本。获取和确认[英] RabbitMQ basic.get and acknowledgement

问题描述

我正在调用:

GetResponse response = channel.basicGet("some.queue", false); // no auto-ack
....
channel.basicAck(deliveryTag, ...);

但是,当我调用 basicGet 时,队列中的消息停留在"就绪"状态,而不是"未确认"状态.我希望它们处于未确认状态,以便我可以 basic.ack 它们(从而将它们从队列中丢弃)或 basic.nack 它们

推荐答案

在 get 之后立即执行 ack 时,它可以正常工作.但是,就我而言,它们是由请求分开的.Spring 的模板在每次执行时都会关闭通道和连接.所以有三种选择:

  • 在应用程序的整个生命周期内保持一个通道和连接打开
  • 有某种对话范围(或最坏情况:使用会话)来存储相同的频道并重用它.
  • 每个请求使用一个通道,立即确认收到,并将消息存储在内存中.

在前两种情况下你不能用spring的RabbitTemplate

本文地址:https://www.itbaoku.cn/post/978525.html