|
此版本仍在开发中,尚未被视为稳定版。如需最新稳定版本,请使用 Spring Integration 7.0.4! |
发布器确认和返回的替代机制
当连接工厂配置了发布者确认和返回时,上述部分讨论了如何配置消息通道以异步接收 confirms 和 returns。
从 5.4 版本开始,提供了一种通常更易于使用的额外机制。
在这种情况下,不要配置 confirm-correlation-expression 或 confirm 和 return 通道。
相反,在 AmqpHeaders.PUBLISH_CONFIRM_CORRELATION 头中添加一个 CorrelationData 实例;然后,您可以通过检查已发送消息的 CorrelationData 实例中 future 的状态,稍后等待结果。
如果返回了消息,returnedMessage 字段将在 future 完成之前始终被填充。
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 以添加您需要的任何额外数据。