我正在使用Mule ESB 3.4。我想開發一個自定義Java組件來計算流接收到多少請求。該流程將例如是這樣的:計算騾流處理的請求
http inbound-endpoint -> counter -> vm-outbound-endpoint
首先,包含計數器的實際變量應存儲在內存中。然後它可能會打印到日誌中或插入到數據庫中(現在不重要)。我所追求的是一種乾淨的設計,我以後可以重新使用它來存儲更複雜的應用程序全局狀態(根據收到的消息的數量和內容)並實現更復雜的邏輯。
我正在使用Mule ESB 3.4。我想開發一個自定義Java組件來計算流接收到多少請求。該流程將例如是這樣的:計算騾流處理的請求
http inbound-endpoint -> counter -> vm-outbound-endpoint
首先,包含計數器的實際變量應存儲在內存中。然後它可能會打印到日誌中或插入到數據庫中(現在不重要)。我所追求的是一種乾淨的設計,我以後可以重新使用它來存儲更複雜的應用程序全局狀態(根據收到的消息的數量和內容)並實現更復雜的邏輯。
解決此問題的方法是將計數器變量創建爲單例Spring bean(例如類java.util.concurrent.atomic.AtomicInteger),然後再通過Spring將其注入到自定義Mule組件中。該組件可以用原型範圍來定義,並且可以在消息每次遍歷時安全地運行諸如counter.incrementAndGet()之類的東西。以這種方式,計數器將隨時保持通過流的消息數量。
由於Spring bean可以是任何您喜歡的POJO,因此可以輕鬆擴展此設計以允許存儲更復雜的狀態。存儲的對象當然要公開線程安全的操作。
對於清潔和去耦方法,您可以使用服務器的通知: http://www.mulesoft.org/documentation/display/current/Mule+Server+Notifications
你只需要添加的偵聽器端點的消息,可以是一個Spring bean並存儲該值在那裏。
你有沒有嘗試過任何東西來實現呢?你遇到了什麼,如果有的話? – Pedantic
不,我還沒有。我唯一能想到的就是組件類中的一個靜態變量。然而,這將使得難以從組件外部訪問它,例如來自另一個流程:/ – Guido