【问题标题】:How to manage manual ack with Spring Cloud Stream Rabbit?如何使用 Spring Cloud Stream Rabbit 管理手动确认?
【发布时间】:2017-10-02 09:25:34
【问题描述】:

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

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

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 参数始终为空,所以我无法检索amqp_channel 标头。

org.springframework.messaging.MessageHandlingException:方法参数类型[接口 com.rabbitmq.client.Channel] 缺少标头“amqp_channel”

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

我错过了什么吗?

【问题讨论】:

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


    【解决方案1】:

    我看到需要更正属性名称。设置确认模式的正确属性名称是:spring.cloud.stream.rabbit.bindings.&lt;channelName&gt;.consumer. acknowledge-mode。您可以查看here 了解更多信息。

    【讨论】:

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