4

我正在尝试设置侦听器将手动向 RabbitMQ 发送 ACK 的场景。我的 application.properties 中有这个

spring.cloud.stream.rabbit.bindings.input.consumer.acknowledge-mode=MANUAL

如何从侦听器发送 ack?我从Manual Acknowledgment of Messages : Spring Cloud Stream Kafka中看到,对于 Kafka,我们创建了一个 Acknowledgment 对象并在其中调用 acknowledge()。RabbitMQ 有没有做同样事情的例子?

4

2 回答 2

4
@StreamListener(target = BAR)
public void handlerMethod(@Payload Foo foo,
                          @Header(AmqpHeaders.CHANNEL) Channel channel,
                          @Header(AmqpHeaders.DELIVERY_TAG) Long deliveryTag) {
    ...
    channel.basickAck(deliveryTag, false);
}

标头由 RabbitMQ 以自动方式添加,因此您可以通过设置开箱即用地使用它们。

于 2017-11-23T10:04:49.760 回答
4

请参阅Spring 集成参考手册。该消息有两个标头,AmqpHeaders.CHANNEL并且AmqpHeaders.DELIVERY_TAG.

您需要basicAck在频道上调用,并传入交付标签。

于 2016-08-20T13:21:53.450 回答