2017-02-18 30 views
3

我正在尋找的是必須有這些額外的特性JMS提供者:JMS具有強制擴展性(Active-Active -...- Active)和排序?

  • 是多經紀人,所有券商必須有效(無單一故障點)
    • 可擴展性上只有兩臺機器,將足以滿足我們的需求
  • 能夠garantee排序(若生產1 + 1名消費者)

我們試圖ActiveMQ的5.14,這似乎爲我們的要求是好的,但只有當單獨考慮:

  • 「的ActiveMQ:提供了大量消息傳送結構的大規模的可擴展性通常要允許許多經紀人一起連接成一個網絡,這樣你就可以擁有儘可能多的邏輯上連接在一起的客戶端,並根據客戶端數量和網絡拓撲結構,根據需要運行儘可能多的消息代理。 ...如果您使用的是客戶端/服務器或集線器/輻條式拓撲,那麼您連接的代理將成爲單點故障,這是需要經紀商網絡(或集羣)的另一個原因,以便您可以承受失敗任何特定經紀人,機器或子網「
  • 」訂購:總消息訂購不保留與經紀人網絡。總訂購適用於單個消費者,但是網絡橋接引入了第二個消費者。另外,網橋消費者通過producer.send(..)轉發消息,所以它們從轉發代理隊列的頭部到目標隊列的尾部。如果單個消費者的網絡代理之間移動時,如果所有的消息總是跟着消費者,但這可能很難有大消息積壓,以保證總訂單可能被保留。」

回答

0

使用Kafka,下一代分佈式消息,因爲它很容易向外擴展,提供高吞吐量,能堅持消息磁盤,並確保有序。

卡夫卡可以增加節點的數量逮捕節點故障。如果你不能刪除JMS傳輸消息如圖所示

JMS Producer(s) -> Kafka Cluster -> JMS Subscriber (s)

請參閱Connection between Apache Kafka and JMS

+0

我們得出了同樣的結論,但是:對於Kafka,你不能使用JMS Java API,Kafka本身只能保證至少一個,而不是一次。 https://kafka.apache.org/08/documentation.html:「......在這一點上,我們將保證該消息只發布一次,我們希望在未來的Kafka版本中添加此消息。」 –

+0

[只有一次]有樣本(https://dzone.com/articles/kafka-clients-at-most-once-at-least-once-exactly-o)。你的觀察真棒,你能突出卡夫卡哪裏錯了嗎? – SACn

+0

你完全沒有錯,你分享的鏈接似乎很好。問題在於尋找一種JMS標準解決方案,而Kafka不是。總之,卡夫卡最適合我們的需求。 –