消息组与选择器如何比较

 常见问题解答 > 使用 Apache ActiveMQ Classic > 消息组与选择器如何比较

选择器只是过滤器。消息组是将消息分组到同一消费者的方式,用于对应用程序进行分区或确保保持排序。

现在,您可以通过让每个消费者对特定标头使用自己的选择器来手动实现消息组。例如,如果您有消费者 A、B、C;您可以使用“A”、“B”、“C”作为 JMSXGroupID 标头(或您喜欢的任何其他标头名称)的值。

然后,如果消费者 A 使用 JMXGroupID = 'A' 作为选择器,它将成为唯一接收 A 消息的消费者;B 和 C 也是如此。

因此,这在一定程度上模拟了消息组。缺点是

  • 您必须知道正在运行的消费者集,才能知道可以在标头上放置 A、B 或 C 的哪些值。因此,如果您启动了一个新的消费者 D,您必须更改生产者以了解 D。使用消息组,您可以使用任何字符串 - 通常,该字符串将来自您的业务,例如产品代码、客户 ID、股票代码名称或其他内容(或数据的组合,例如 IBM 和 NASDAQ 以及星期二)。

  • 如果由于某种原因,消费者 B 停止运行,则没有人会消耗 B 的任何消息 - 您必须知道手动重新启动 B。使用消息组,系统会自动为您进行分区和负载均衡,并立即进行故障转移。

  • 没有什么可以阻止您意外地创建两个具有相同选择器的线程 - 或者在网络上启动两个具有相同选择器的进程,并且意外地从同一组消息中消费,这完全破坏了排序;使用消息组,您不必担心这一点 - 因为它保证您的整个系统中只有一个线程会按顺序处理来自一个组的消息 - 无论您启动了多少个消费者。

因此,总的来说;您可以使用选择器手动进行分区。但是,消息组是一种自分区和自动故障转移机制,它还保证单个线程会按顺序处理特定消息组一次。

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛徽标和 Apache ActiveMQ 项目徽标是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 许可。