使用Spring Cloud Stream Rabbit Binder时是否需要设置'useConfirmHeader'来启用发布者确认

问题描述 投票:0回答:1

如果我们想要使用

Spring Cloud Stream Rabbit Binder
启用发布者确认,是否需要在
application.yml 文件
中将 useConfirmHeader 设置为 true

即使我们删除此

publisher-confirms
设置,
useConfirmHeader
仍然可以完美工作:

spring.cloud.stream.rabbit.bindings.output-out-0.producer.useConfirmHeader=true

我们还需要这样的设置吗?什么时候需要?

参考链接:https://docs.spring.io/spring-cloud-stream/reference/rabbit/rabbit_overview/publisher-confirms.html#page-title

spring-cloud-stream spring-cloud-stream-binder
1个回答
0
投票

这是正确的,因为那里的逻辑是这样的:

buildRabbitTemplate(extendedProperties,
                        errorChannel != null || extendedProperties.isUseConfirmHeader()));

捐赠给

mandatory
。所以,或者这个,或者
errorChannelEnabled
,或者
errorHandlerDefinition
提供了。

我不明白如何将

mandatory
设置为
true

但是请参阅其 JavaDocs:

/**
 * When true, the binding will complete the {@link java.util.concurrent.Future} field
 * in a {@link org.springframework.amqp.rabbit.connection.CorrelationData} contained
 * in the
 * {@link org.springframework.amqp.support.AmqpHeaders#PUBLISH_CONFIRM_CORRELATION}
 * header when the confirmation is received.
 */
private boolean useConfirmHeader;

但我没有看到 Rabbit Binder 中以某种方式设置了这样的标头。它用于从

AbstractAmqpOutboundEndpoint
提取用户相关数据,但仅此而已。此
useConfirmHeader
对标题交互没有影响。

我相信此选项的目的是装饰性的,以表明确认将由

AmqpHeaders.PUBLISH_CONFIRM_CORRELATION
标头中的值处理。

其进一步的逻辑是与

confirmAckChannel
:

互斥
Assert.state(!StringUtils.hasText(extendedProperties.getConfirmAckChannel()),
                    "You cannot specify a 'confirmAckChannel' when 'useConfirmHeader' is true");

已删除一段时间了。

© www.soinside.com 2019 - 2024. All rights reserved.