跳到主要内容

发布者确认和返回的替代机制

QWen Plus 中英对照 Alternative Mechanism for Publisher Confirms and Returns

当连接工厂配置为发布确认和返回时,上述部分讨论了配置消息通道以异步接收确认和返回。从 5.4 版开始,有一种额外的机制,通常更容易使用。

在这种情况下,不要配置 confirm-correlation-expression 或确认和返回通道。相反,在 AmqpHeaders.PUBLISH_CONFIRM_CORRELATION 头中添加一个 CorrelationData 实例;然后你可以稍后通过检查已发送消息的 CorrelationData 实例中的未来状态来等待结果。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 { ... }
java

为了提高性能,你可能希望一次性发送多条消息,并稍后等待确认,而不是一次只发送一条。返回的消息是在转换后的原始消息;你可以通过继承 CorrelationData 并添加任何你需要的额外数据。