我有一個需求,我需要確保一次只有一個消息正在被騾流處理。流程由石英調度程序觸發,該程序讀取一個文件從FTP服務器每次如何判斷是否正在進行騾流消息處理
我建議的解決方案是保持一個全局變量「FLOW_STATUS」,當收到一條消息時將被設置爲「RUNNING」,並且一旦完成消息處理就會被重置爲「STOPPED」。
如果「FLOW_STATUS」爲「正在運行」,任何送到流程的消息都將檢查此變量並中止。
此設置似乎正在工作,但我想知道是否有更好的方法來做到這一點。
有沒有解決這個或任何內置騾子輔助功能的最佳做法來實現的,而不是依賴於全局變量
感謝Matt!。這意味着我的流處理應該是同步的,以便只有在所有處理完成後才能釋放接收者線程。我正在使用VM隊列來利用我的流程中的羣集。我相信最終會在 – 2014-10-08 21:55:58
的早期釋放接收者線程。Mule將爲每個流使用三個線程池。接收器池,處理池和調度池。當新消息進入流的Mule服務器時,會爲該消息啓動一個新的接收者線程。如果接收器池中沒有剩餘線程,則服務器將阻塞並等待一個線程。那時你開始有性能問題。接收器池中的線程將等待處理池中的線程打開,然後傳遞消息進行處理。在集羣環境中,Mule將在集羣中的任何可用服務器上查找線程。 – 2014-10-09 12:49:00
我必須鎖定流程,直到消息處理完成。由於我在兩者之間使用虛擬機隊列,因此我假定接收方線程會將消息移交給處理池中的虛擬機隊列的線程,並返回到接收方池。這意味着服務器可以使用該線程接收另一條消息,而之前的消息處理仍在進行中。因此,對於接收者線程配置文件,maxActiveThreads = 1不會對我的用例產生幫助。如果我的假設錯誤,請糾正我。我猜測使用全局變量是唯一的方法。 – 2014-10-09 17:26:43