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

当连接工厂配置用于发布者确认和返回时,上述章节讨论了消息通道的配置,以异步接收confirmsreturns。从版本5.4开始,有一种新的机制,通常更易于使用。

在这种情况下,请勿配置confirm-correlation-expressionconfirmreturn通道。相反,在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进行子类化。

© . This site is unofficial and not affiliated with VMware.