我请求:
GetResponse response = channel.basicGet("some.queue", false); // no auto-ack .... channel.basicAck(deliveryTag, ...);
但是,当我调用basicGet时,队列中的消息保持在“Ready”状态,而不是“Unacknowledged”状态。我希望它们处于未确认状态,这样我就可以basic.ack它们(从而将它们从队列中丢弃),或者basic.nack它们
basicGet
basic.ack
basic.nack
xt0899hw1#
我正在做以下操作来模拟延迟确认:
1.从初始队列中获取(使用)消息。
123456是消息的唯一ID。设置以下属性
1.从消息ID计算队列名称并从“PendingAck_123456”队列获取1.确认它(不需要调用.getBody())。这将从这个挂起队列中删除它,阻止TTL重新排队它
.getBody()
wgmfuz8q2#
当在get之后立即执行ack时,它工作得很好。然而,在我的情况下,他们被要求分开。spring的模板在每次执行时关闭通道和连接。所以有三个选择:
get
ack
在前两种情况下,您无法使用spring的RabbitTemplate
RabbitTemplate
5gfr0r5j3#
GetResponse resp = channel.basicGet(queueName, false); Envelope envelope = resp.getEnvelope(); long deliveryTag = envelope.getDeliveryTag(); channel.basicAck(deveryTag,false)
3条答案
按热度按时间xt0899hw1#
我正在做以下操作来模拟延迟确认:
消费时
1.从初始队列中获取(使用)消息。
123456是消息的唯一ID。
设置以下属性
确认时
1.从消息ID计算队列名称并从“PendingAck_123456”队列获取
1.确认它(不需要调用
.getBody()
)。这将从这个挂起队列中删除它,阻止TTL重新排队它
备注
wgmfuz8q2#
当在
get
之后立即执行ack
时,它工作得很好。然而,在我的情况下,他们被要求分开。spring的模板在每次执行时关闭通道和连接。所以有三个选择:在前两种情况下,您无法使用spring的
RabbitTemplate
5gfr0r5j3#