2009-06-30 179 views
1

在騾2.0架構所使用的收集聚合器的工作原理有點像這樣:騾子聚集 - 流聚集

  • 入站路由器需要的信息的集合,將其分解成許多小的消息 - 每個較小的消息得到印有對應於父消息的相關標識

  • 這些消息流經各種服務

  • 最後這些消息在入站彙集到這基於父消息的相關ID和期望消息的數量來收集消息。一旦接收到所有期望的消息,則調用聚合函數並返回結果。

現在,當一個組中的消息數量相當小時,它可以正常工作。然而,一旦一個組中的消息數量變得很大~100k,那麼大量的內存就會束縛在等待稍後消息到達的消息組中。如果有多個組在同一時間彙總,則情況會變得更糟。

解決此問題的一種方法是實現流聚合器。在我的使用案例中,我基本上總結了基於密鑰的各種消息,這可以在不必同時查看組中所有消息的情況下完成。我只想知道在將結果轉發到端點之前已收到所有消息。

這聽起來像是一個合理的解決方案?

這是否已經在Mule的某處實施?

有沒有更好的方法來做到這一點?

回答

2

這似乎是一個合理的方法(我不是任何方式的騾專家),我已閱讀所有的騾文件,並不認爲有這樣的東西在那裏(流支持是有限的到幾個連接器和變壓器 - 這很簡單,因爲它只是通過InputStream傳遞)。在騾流中只有幾件事情,所以你可能需要有其他修改變形金剛(如果你使用它們)流。您只需實現提供InputStream的聚合器,並在獲得一些連續的消息序列後立即開始流式傳輸。

然而,在描述中有一句話「......在將結果轉發給端點之前已收到所有消息」可能令人不安。除非你的意思是你(在你的服務組件中可能)會保留你已經得到的所有東西,然後再轉發(可能小得多)的處理結果,否則這是非常自然的。