【问题标题】:Manual ack with Spring Cloud Stream RabbitMQ使用 Spring Cloud Stream RabbitMQ 手动确认
【发布时间】:2016-12-27 03:50:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: rabbitmq spring-cloud-stream


    【解决方案1】:

    请参阅Spring Integration Reference Manual。该消息有两个标头,AmqpHeaders.CHANNELAmqpHeaders.DELIVERY_TAG

    你需要在频道上调用basicAck,传入delivery tag。

    【讨论】:

      【解决方案2】:
      @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 以自动方式添加,因此您可以通过设置开箱即用地使用它们。

      【讨论】:

        猜你喜欢
        • 2018-06-20
        • 2020-07-26
        • 1970-01-01
        • 2017-10-02
        • 2018-01-24
        • 2019-03-27
        • 1970-01-01
        • 2021-06-03
        • 2017-12-22
        相关资源
        最近更新 更多