2008-10-17 64 views
9

我正在尋找Java中的輕量級消息傳遞框架。我的任務是以SEDA的方式處理事件:我知道處理的某些階段可以快速完成,而其他階段則不會,並且希望將這些處理階段分開。Java中的輕量級消息傳遞(異步調用)

比方說,我有組件A和B以及處理引擎(是這個容器或其他任何東西)調用組件A,而組件A又調用組件B.我不在乎組件B的執行時間是2s,而是I例如,如果組件A的執行時間低於50ms,請注意。因此,組件A向B提交消息似乎是最合理的,B將在期望的時間處理消息。

我知道不同的JMS實現和Apache ActiveMQ:它們對此太重了。我搜索了一些輕量級的消息(具有諸如消息序列化和最簡單的路由之類的基本功能),但無濟於事。

在這個問題上你有什麼建議嗎?

回答

4

您是否需要任何類型的持久性(例如,如果您的JVM在處理數千條消息之間死亡)並且需要消息來遍歷其他任何JVM?

如果它全部位於單個JVM中,並且不需要擔心事務,JVM死機時的恢復或消息丟失 - 那麼就像Chris上面所說的那樣,Executors沒問題。

ActiveMQ非常輕巧;如果你願意,你可以在沒有持久性的單個JVM中使用它;然後可以在需要時啓用事務/持久性/恢復/遠程處理(與多個JVM一起使用)。但是如果你不需要這些東西,那麼它的矯枉過正 - 只需使用Executors。

順便說一下哪些步驟可能需要持續性/可靠性或負載均衡到多個JVM,如果你不知道的另一個選擇是hide the use of middleware completely這樣你就可以與在內存SEDA與執行人到JMS/ActiveMQ的隊列,當你需要切換。

例如可能有些步驟需要可靠的恢復(因此需要某種持久性),而其他時間則不需要。

4

真的輕便? Executors。 :-)所以你建立了一個執行者(B,在你的描述中),而A只是向執行者提交任務。

2

我認爲Apache Camel涵蓋了您的所有需求。它適用於JVM,支持SEDA風格(http://camel.apache.org/seda.html)和簡單路由。可以在JMS提供者或其他適配器上使用,也可以在Spring上使用。

1

對不起復活舊的線程,但也許它可以幫助其他人閱讀它...我認爲FFMQ是一個輕量級消息框架的好候選人。

更新:但是我不確定它是否支持重新傳遞延遲(死信隊列問題)。即使對於輕量級供應商,我也會覺得這是可用但我想這可能與MessageSelector查詢和消息屬性的組合。

0

幫助別人閱讀此主題:
最輕的消息框架之一是Mbasseder。 MB Ambassador是發佈訂閱模式之後的一個非常輕量級的消息(事件)總線實現。它旨在易於使用,旨在實現功能豐富和可擴展,同時保持資源效率和性能。
MB Ambassador的高性能核心是一種專門的數據結構,可以最大限度地減少鎖爭用,從而使併發訪問的性能下降最小。
特性:通過註釋,同步和/或異步事件傳遞,弱引用,消息過濾聲明式偵聽器定義