簡體   English   中英

如何檢查數據是否在 Spring Integration 中得到處理或閑置

[英]How to check if data is getting processed in Spring Integration or sitting idle

這是關於 Spring 集成(SI)應用程序,在我的情況下,存在許多端點。 所以通常當數據進入這個應用程序時,大約需要 60 秒才能完成處理。 我現在正在嘗試為此應用程序構建關閉機制,它將執行以下操作:-

  1. 它將首先停止攝取層端點(在我的情況下為 kafka 偵聽器),以便沒有更多消息進入應用程序
  2. 然后它會在關機前等待 60 秒。 以便處理現有消息。

但是這個等待時間是硬編碼的,我想檢查應用程序是否正在處理任何數據。 如果是,則等待 30 秒,然后再次檢查。 如果沒有數據得到處理,則關閉應用程序。 請讓我知道是否有任何方法可以檢查任何 SI 端點中是否存在數據。

開箱即用的組件中沒有這樣的鈎子。 並且可能甚至不可能實現,因為框架中的所有組件都是無狀態的。

現在請告訴我,是什么讓您認為您需要實現自己的關閉機制。 為什么常規的ApplicationContext.close()對您來說還不夠?

在文檔中查看有關生命周期的更多信息: https : //docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-factory-nature

有了它,框架確實首先停止入站端點,以免在應用程序處於關閉狀態時讓外部數據進入應用程序。 然后它停止所有其他內部端點以停止處理它們的傳入消息。 但所有即時消息仍會得到處理。 如果正在執行某些操作,則應用程序上下文不會完成。

如果這對你來說還不夠,我會建議像AtomicInteger activeCount這樣的東西作為全局 bean。 當您提到的 Kafka 偵聽器發出消息時,您將incrementAndGet()它。 當您在流程結束時處理完消息后,您將調用它的decrementAndGet() 當您的自定義關閉功能正在進行時,您只需檢查該activeCount.get()的數量以確保它是0以優雅地終止您的進程。

但同樣:我們不需要所有這些,因為標准ApplicationContext.close()涵蓋了我們。

暫無
暫無

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

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