2017-02-18 45 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不是。总之,卡夫卡最适合我们的需求。 –