如果我们想要使用
Spring Cloud Stream Rabbit Binder启用发布者确认,是否需要在
application.yml 文件中将
useConfirmHeader
设置为 true
?
即使我们删除此
publisher-confirms
设置,useConfirmHeader
仍然可以完美工作:
spring.cloud.stream.rabbit.bindings.output-out-0.producer.useConfirmHeader=true
我们还需要这样的设置吗?什么时候需要?
这是正确的,因为那里的逻辑是这样的:
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");
已删除一段时间了。