首页 > 解决方案 > ActiveMQ Artemis 什么时候清理 group id map

问题描述

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

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

在一个幸福的情况下,我们的消费者可以存活很长时间,因为没有理由关闭消息侦听器的连接。这导致组数增加。有没有办法为组 id 配置过期时间?或者其他方式来减少组图而不需要消费者定期重新连接?

标签: activemq-artemis

解决方案


您在这里有 3 个选项(没有特别的顺序)...

首先,您可以使用组“桶”。这实质上是通过使用存储桶而不是 group-id/consumer 的 1:1 映射来减小映射的大小。文档中提供了其他详细信息和配置信息。

其次,您可以使用 a 配置 a 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。这也在文档中进行了讨论。


推荐阅读