我尝试了几种方法来管理使用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
,以及如何注入它。
我错过了什么吗?
答案 0 :(得分:2)
我看到需要更正属性名称。设置acknowledgeMode的正确属性名称是:spring.cloud.stream.rabbit.bindings.<channelName>.consumer. acknowledge-mode
。您可以查看here了解详情。