簡體   English   中英

Spring Integration重新處理消息

[英]Spring Integration Re-Processing Messages

我正在使用Spring Integration構建用於工作的應用程序,而我對該框架則是全新的。

我正在使用冪等接收器來檢查數據庫,以查看以前是否已查看消息的ID,如果有,則將消息傳遞給聚合器。 消息聚合后,就會將新消息發送到以下處理程序。

我看到的問題是,消息在處理程序中失敗時,它似乎以某種方式被重新排隊。 我在日志中看到的是,冪等接收器將丟棄它所看到的消息,然后將一條消息傳遞給聚合器,否則該消息將失敗。 下一個冪等接收器將丟棄之前失敗的消息。 在此之后的周期中,冪等接收器將傳遞消息,並且它將再次失敗,從而導致周期重新開始。

我想念什么?

不清楚你的意思和期望。 首先, Idempotent Received的目的不再處理同一條消息。 根據您的描述,您期望得到相反的結果:

IdempotentReceiverInterceptor的邏輯基於所提供的MessageSelector ,如果該選擇器不接受該消息,則它將被設置為true的duplicateMessage標頭豐富。 目標MessageHandler (或下游流)可以查詢此標頭以實現正確的冪等邏輯。 如果IdempotentReceiverInterceptor配置了discardChannel和/或throwExceptionOnRejection = true ,則重復的消息不會發送到目標MessageHandler.handleMessage() ,而是會被丟棄。

那里很重要的詞是duplicate 因此,請重新考慮對冪等接收器的處理。

您對失敗者的描述,對事務的重新排隊和重新處理之類的聲音對我來說就像是事務回滾。 如果您使用的也是事實IdempotentReceiverInterceptor基礎上, JdbcMetadataStoreTests和滾動支持TX過程中存儲的所有數據將被丟棄,因為沒有提交。

如果您在GitHub上共享一個簡單的Spring Boot應用程序,使我們能夠重現並更好地了解正在發生的事情,那么對我們來說可能會更容易為您提供幫助。 否則,您的問題尚不清楚,因此可以通過StackOverflow策略在此處解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM