具有强制可伸缩性(主动-主动-…-主动)和排序的JMS?

具有强制可伸缩性(主动-主动-…-主动)和排序的JMS?,jms,message-queue,Jms,Message Queue,我正在寻找一个JMS提供程序,它必须具有以下附加特性: 是多个代理,其中所有代理都必须处于活动状态(无单点故障) 仅在两台机器上实现可扩展性就足以满足我们的需要 能够保证订购(如果1个生产商+1个消费者) 我们尝试了ActiveMQ 5.14,它似乎适合我们的两种需求,但只有在单独考虑时: “ActiveMQ:为了提供大型消息传递结构的大规模可扩展性,您通常希望允许多个代理连接到一个网络中,这样您就可以拥有任意数量的客户端,所有客户端都可以逻辑连接在一起,并根据您的客户端数量和网络拓扑

我正在寻找一个JMS提供程序,它必须具有以下附加特性:

  • 是多个代理,其中所有代理都必须处于活动状态(无单点故障)
    • 仅在两台机器上实现可扩展性就足以满足我们的需要
  • 能够保证订购(如果1个生产商+1个消费者)
我们尝试了ActiveMQ 5.14,它似乎适合我们的两种需求,但只有在单独考虑时:

  • “ActiveMQ:为了提供大型消息传递结构的大规模可扩展性,您通常希望允许多个代理连接到一个网络中,这样您就可以拥有任意数量的客户端,所有客户端都可以逻辑连接在一起,并根据您的客户端数量和网络拓扑运行任意数量的消息代理…”。。。如果您使用的是客户机/服务器或集线器/分支式拓扑,则您连接到的代理将成为一个单点故障,这是需要代理网络(或集群)的另一个原因,以便您能够在任何特定代理、机器或子网的故障中生存”
  • “排序:对于代理网络,不保留总邮件排序。总订购只适用于一个消费者,但networkBridge引入了第二个消费者。此外,网桥消费者通过producer.send(..)转发消息,因此他们从转发代理上的队列头转到目标上的队列尾。如果单个消费者在网络代理之间移动,则如果所有消息始终跟随消费者,则可能会保留总订单,但这在大量消息积压的情况下很难保证。”
使用下一代分布式消息传递,因为它易于扩展,提供高吞吐量,可以将消息持久保存到磁盘并确保有序性

使用kafka,您可以增加节点数以阻止节点故障

JMS生产者->Kafka集群->JMS订户


请参阅。

我们得出了相同的结论,但是:对于Kafka,您不能使用JMS Java API,而Kafka本身只能保证至少一次,而不是一次。。。在这一点上,我们可以保证消息只发布了一次。我们希望在未来的卡夫卡版本中添加这一点。“上面有一个示例。你的观察非常棒,你能强调一下卡夫卡哪里错了吗?你一点都没有错,你共享的链接似乎很好。问题是关于搜索JMS标准解决方案,而卡夫卡不是。无论如何,卡夫卡可能也是我们需要的最好的解决方案。