4
votes

I'm looking for a JMS provider that must have these additional characteristics:

  • Be multi brokers, where all brokers must be Active (no single point of failure)
    • Scalability on only two machines, would be sufficient for our needs
  • Be able to garantee ordering (if 1 producer + 1 consumer)

We have tried ActiveMQ 5.14, which seemed to be ok for both our requirements, but only when considered separately:

  • "ActiveMQ: To provide massive scalability of a large messaging fabric you typically want to allow many brokers to be connected together into a network so that you can have as many clients as you wish all logically connected together - and running as many message brokers as you need based on your number of clients and network topology. ... If you are using client/server or hub/spoke style topology then the broker you connect to becomes a single point of failure which is another reason for wanting a network (or cluster) of brokers so that you can survive failure of any particular broker, machine or subnet"
  • "Ordering: Total message ordering is not preserved with networks of brokers. Total ordering works with a single consumer but a networkBridge introduces a second consumer. In addition, network bridge consumers forward messages via producer.send(..), so they go from the head of the queue on the forwarding broker to the tail of the queue on the target. If single consumer moves between networked brokers, total order may be preserved if all messages always follow the consumer but this can be difficult to guarantee with large message backlogs."
1

1 Answers

0
votes

Use Kafka, next generation distributed messaging as it is easy to scale out, offers high throughput, can persist messages to disk and ensure orderliness.

With kafka you can increase number of nodes to arrest node failure. If you can't remove JMS transfer messages as shown

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

See Connection between Apache Kafka and JMS.