釋出者確認和返回的替代機制

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