如需使用最新稳定版本,请使用 Spring Integration 7.0.4spring-doc.cadn.net.cn

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

当连接工厂配置为发布确认和返回时,上述部分讨论了配置消息通道以异步接收确认和返回的内容。 从 5.4 版本开始,存在一种额外的机制,通常更易于使用。spring-doc.cadn.net.cn

在此情况下,请勿配置 confirm-correlation-expression 或确认与返回通道。 相反,请在 AmqpHeaders.PUBLISH_CONFIRM_CORRELATION 头中添加一个 CorrelationData 实例;随后,您可以通过检查已发送消息的 CorrelationData 实例中未来的状态来稍后等待结果(们)。 在 future 完成之前,returnedMessage 字段将始终被填充(如果有消息返回)。spring-doc.cadn.net.cn

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 创建子类以添加额外数据。spring-doc.cadn.net.cn