Apache ActiveMQ Artemis使用JMSXGroupId实现“粘性”消费者会话。使用相同JMSXGroupId排队的消息被发送给同一个使用者,使用FIFO,单线程。然而,这确实允许多个线程同时处理唯一的JMSXGroupId组--这是非常完美的--请参见下面的内容:
16:46:42.451 [Thread-4] INFO Log - This is Message 30 In JMSXGroup: Group C | To Thread Thread-4
16:46:42.451 [Thread-3] INFO Log - This is Message 283 In JMSXGroup: Group B | To Thread Thread-3
16:46:42.451 [Thread-3] INFO Log - This is Message 284 In JMSXGroup: Group B | To Thread Thread-3
16:46:42.451 [Thread-4] INFO Log - This is Message 31 In JMSXGroup: Group C | To Thread Thread-4
16:46:42.452 [Thread-4] INFO Log - This is Message 32 In JMSXGroup: Group C | To Thread Thread-4
16:46:42.452 [Thread-3] INFO Log - This is Message 285 In JMSXGroup: Group B | To Thread Thread-3Oracle和Amazon没有表现出相同的“粘性”消费者行为。我在JMSSpecification中找不到任何特定的东西,只有JMSXGroupId用来将相关的消息分组在一起。
我的期望是,在设置JMSXGroupId时,所有JMS使用者都会表现出这种“粘性”行为,但情况似乎并非如此。
是否有人仅通过设置JMSXGroupId就能在Oracle / SQS中实现这种行为?或者JMSXGroupId的意图是允许consumer在去队列时使用selector?这似乎并不像在运行时需要识别的那样扩展,而ActiveMQ实现显然是这样的。
发布于 2021-05-06 13:56:11
JMS规范只规定应按顺序使用同一组中的消息。它并没有说明如何实现这个功能。
ActiveMQ Artemis通过将同一组中的所有消息分配给单个使用者(即您所称的“粘性”消费者)来实现消息分组。但是,其他JMS提供程序可以自由地以其他方式实现此功能。
如前所述,唯一的要求是按顺序使用同一组中的消息。如果您已经在Oracle AQ和Amazon上测试过此功能,并且有证据表明同一组中的消息没有按顺序使用,那么您应该联系这些提供者以获得支持。如果最终结果是相同的,那么简单地说它们的实现与ActiveMQ Artemis不同是无效的。
https://stackoverflow.com/questions/67392674
复制相似问题