Apache ActiveMQ Artemis 集群中的消息顺序

问题描述

我正在尝试在 Apache Artemis 集群中实现消息排序。连接到集群的生产者/消费者实现高可用性。因此,在某个时间点将有两个相同应用程序的实例连接到主题或队列。到目前为止,我可以找到以下两种方法可以用于在 Red Hat AMQ / Artemis 集群中实现排序:

  1. 消息组(仅当集群中的每个节点有一个消费者时才可靠)
  2. 独占队列(消息顺序仅保留在单个节点上)。

我完全理解使用集群和期望消息排序是相互冲突的要求,但它仍然是我正在从事的项目中实现的要求,因为消费者无法处理处理乱序消息的复杂性。

在 Artemis ActiveMQ/Red Hat AMQ 集群中,除了上述方法之外,还有哪些可以实现消息排序的替代方案?

解决方法

在集群环境中,一个独占消费者与每个代理上的每个队列相关联,因此根据消息负载平衡配置,每个代理可以有一个消费者接收消息。这打破了排序。您的生产者和消费者需要位于同一个代理实例上以保持排序。

如您所说,集群消息组功能并不可靠,但它在某些非常特定的用例中可能很有用。另请注意,对于 HA 而言,拥有一组代理是不够的。您需要明确配置 HA(共享存储或复制),否则,如果代理永久失败,则其所有消息都将丢失。