跳到主要内容
版本:7.0.2

发布者确认与消息返回的替代机制

DeepSeek V3 中英对照 Alternative Mechanism for Publisher Confirms and Returns

当连接工厂配置为支持发布者确认和返回时,以上章节讨论了如何配置消息通道以异步接收confirmsreturns。从版本5.4开始,提供了一种通常更易用的额外机制。

在这种情况下,请不要配置 confirm-correlation-expressionconfirmreturn 通道。相反,请在 AmqpHeaders.PUBLISH_CONFIRM_CORRELATION 头部添加一个 CorrelationData 实例;随后,您可以通过检查已发送消息对应的 CorrelationData 实例中 future 的状态来等待结果。在 future 完成之前,returnedMessage 字段(如果消息被退回)将始终被填充。

CorrelationData corr = new CorrelationData("someId"); // <--- Unique "id" is required for returns
someFlow.getInputChannel().send(MessageBuilder.withPayload("test")
.setHeader("rk", "someKeyThatWontRoute")
.setHeader(AmqpHeaders.PUBLISH_CONFIRM_CORRELATION, corr)
.build());
...
try {
Confirm Confirm = corr.getFuture().get(10, TimeUnit.SECONDS);
Message returned = corr.getReturnedMessage();
if (returned !- null) {
// message could not be routed
}
}
catch { ... }

为提高性能,您可能希望一次性发送多条消息并稍后等待确认,而非逐条发送。返回的消息是转换后的原始消息;您可以通过继承 CorrelationData 类并添加所需额外数据来自定义消息。