釋出者確認和返回的替代機制
當連線工廠配置用於釋出者確認和返回時,上述章節討論了訊息通道的配置,以非同步接收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進行子類化。