ActiveMQ Artemis 什么时候清理group id map

When does ActiveMQ Artemis clean up the group id map

当使用 JMSXGroupId 属性 对消息进行分组时,代理需要保留 'map' 的 groupId 值和消费者以确保发送具有相同 JMSXGroupId 的所有消息给同一个消费者。

我们注意到只有当我们断开消费者时,服务器上的组计数大小才会减少。

在一个令人高兴的情况下,我们的消费者可以活很长时间,因为没有理由关闭消息侦听器的连接。这导致组计数数字增加。有没有办法为组 ID 配置过期时间?还是其他方式减少群映射而不需要消费者定时重连?

这里有 3 个选项(排名不分先后)...

首先,您可以使用组 "buckets." 这实际上通过使用桶而不是 group-id/consumer 的 1:1 映射来减小映射的大小。 the documentation.

中提供了更多详细信息和配置信息

其次,您可以配置 LOCAL grouping-handlergroup-timeout,如果组 ID 在配置的时间内未使用,这将删除映射条目。例如:

<grouping-handler name="my-grouping-handler">
   <type>LOCAL</type>
   <group-timeout>60000</group-timeout>
</grouping-handler>

使用此配置,任何一分钟(即 60,000 毫秒)未使用的组 ID 都将被删除。

第三,您可以通过将组中最后一条消息的JMSXGroupSeq 属性 设置为-1 来手动关闭组。 the documentation.

中也对此进行了讨论