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-handler
和 group-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.
中也对此进行了讨论
当使用 JMSXGroupId
属性 对消息进行分组时,代理需要保留 'map' 的 groupId 值和消费者以确保发送具有相同 JMSXGroupId
的所有消息给同一个消费者。
我们注意到只有当我们断开消费者时,服务器上的组计数大小才会减少。
在一个令人高兴的情况下,我们的消费者可以活很长时间,因为没有理由关闭消息侦听器的连接。这导致组计数数字增加。有没有办法为组 ID 配置过期时间?还是其他方式减少群映射而不需要消费者定时重连?
这里有 3 个选项(排名不分先后)...
首先,您可以使用组 "buckets." 这实际上通过使用桶而不是 group-id/consumer 的 1:1 映射来减小映射的大小。 the documentation.
中提供了更多详细信息和配置信息其次,您可以配置 LOCAL
grouping-handler
和 group-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.