非同步 @RabbitListener 返回型別

@RabbitListener(和 @RabbitHandler)方法可以指定非同步返回型別 CompletableFuture<?>Mono<?>,從而允許非同步傳送回覆。ListenableFuture<?> 不再受支援;它已被 Spring Framework 棄用。

偵聽器容器工廠必須配置為 AcknowledgeMode.MANUAL,以便消費者執行緒不會確認訊息;相反,當非同步操作完成時,非同步完成將確認或拒絕訊息。當非同步結果因錯誤完成時,訊息是否重新排隊取決於丟擲的異常型別、容器配置和容器錯誤處理器。預設情況下,訊息將被重新排隊,除非容器的 defaultRequeueRejected 屬性設定為 false(它預設為 true)。如果非同步結果以 AmqpRejectAndDontRequeueException 完成,則訊息將不會被重新排隊。如果容器的 defaultRequeueRejected 屬性為 false,您可以透過將未來的異常設定為 ImmediateRequeueException 來覆蓋它,並且訊息將被重新排隊。如果在偵聽器方法中發生一些阻止建立非同步結果物件的異常,您必須捕獲該異常並返回適當的返回物件,該物件將導致訊息被確認或重新排隊。

從 2.2.21、2.3.13、2.4.1 版本開始,當檢測到非同步返回型別時,AcknowledgeMode 將自動設定為 MANUAL。此外,帶有致命異常的傳入訊息將單獨被否定確認,而之前任何未確認的訊息也會被否定確認。

從 3.0.5 版本開始,@RabbitListener(和 @RabbitHandler)方法可以用 Kotlin suspend 標記,並且整個處理過程和回覆生成(可選)發生在相應的 Kotlin 協程上。所有提及的關於 AcknowledgeMode.MANUAL 的規則仍然適用。必須在類路徑中存在 org.jetbrains.kotlinx:kotlinx-coroutines-reactor 依賴項,以允許 suspend 函式呼叫。

同樣從 3.0.5 版本開始,如果為具有非同步返回型別(包括 Kotlin suspend 函式)的偵聽器配置了 RabbitListenerErrorHandler,則錯誤處理器會在失敗後被呼叫。有關此錯誤處理器及其用途的更多資訊,請參閱處理異常

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