此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
发布者确认和退货的替代机制
当连接工厂配置为发布者确认和返回时,上面的部分讨论消息通道的配置以异步接收确认和返回。 从 5.4 版开始,有一个额外的机制,通常更易于使用。
在这种情况下,请勿配置confirm-correlation-expression
或确认和返回通道。
相反,请添加一个CorrelationData
实例中的AmqpHeaders.PUBLISH_CONFIRM_CORRELATION
页眉;然后,您可以通过在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 { ... }
为了提高性能,您可能希望发送多条消息并稍后等待确认,而不是一次发送一条。
返回的消息是转换后的原始消息;您可以将 A 的子类CorrelationData
以及您需要的任何附加数据。