[英]How to check if data is getting processed in Spring Integration or sitting idle
這是關於 Spring 集成(SI)應用程序,在我的情況下,存在許多端點。 所以通常當數據進入這個應用程序時,大約需要 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.