![](/img/trans.png)
[英]Change the group.id of spring-kafka listeners without re-processing processed or losing unprocessed messages
[英]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.