如何使用Spring Cloud Stream Rabbit管理手动ack?

时间:2017-05-04 09:20:11

标签: rabbitmq spring-cloud spring-cloud-stream

我尝试了几种方法来管理使用RabbitMQ的手动确认,特别是基于this previous post,但不幸的是,它们都不起作用。

在我的配置文件中,我将确认模式设置为MANUAL,如下所示:

spring:
  cloud:
    stream:
      bindings:
        magento-consumer:
          binder: rabbit
          destination: toto
          durableSubscription: false
          consumer:
            acknowledge-mode: MANUAL

然后,我有一个receive方法,由@StreamListener注释,它有4个参数:

    @StreamListener(SinkInterface.NAME)
    public void receive(
            Message<Event> m,
            @Header(name = Queue.TO_MAGENTO , required = false) Boolean header,
            @Header(AmqpHeaders.CHANNEL) Channel channel,
            @Header(AmqpHeaders.DELIVERY_TAG) Long deliveryTag
    ) {

        //Do something

    }

问题是channel参数始终为null,因此我无法检索amqp_channel标题。

  

org.springframework.messaging.MessageHandlingException:方法参数类型[interface com.rabbitmq.client.Channel]缺少标题'amqp_channel'

如何检索此频道参数? 我不明白为什么没有设置amqp_channel,以及如何注入它。

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

我看到需要更正属性名称。设置acknowledgeMode的正确属性名称是:spring.cloud.stream.rabbit.bindings.<channelName>.consumer. acknowledge-mode。您可以查看here了解详情。