在本节中,我们将讨论如何配置 Apache ActiveMQ Artemis 来处理慢速消费者。慢速消费者(使用服务器端队列,例如 JMS 主题订阅者)会对代理性能造成重大问题。如果消息在消费者的服务器端队列中堆积,内存将会开始填满,代理可能会进入分页模式,这将对性能产生负面影响。但是,可以设置条件,以便将那些没有及时确认消息的消费者从代理断开连接。在非持久性 JMS 订阅者的情况下,这将允许代理移除订阅及其所有消息,释放宝贵的服务器资源。

1. 必要的配置

默认情况下,服务器不会检测慢速消费者。如果需要检测慢速消费者,请参阅地址模型章节以了解有关所需地址设置的更多信息。

确定消费者是否缓慢的计算只检查特定消费者已确认的消息数量。它不考虑消费者是否启用了流量控制,消费者是否正在流式传输大型消息等因素。在配置慢速消费者检测时请牢记这一点。

请注意,慢速消费者检查是使用计划线程池执行的,并且代理上启用慢速消费者检测的每个队列将在内部的java.util.concurrent.ScheduledThreadPoolExecutor实例中创建新的条目。如果队列数量很多,并且slow-consumer-check-period相对较低,那么执行一些检查可能会延迟。但是,这不会影响检测算法使用的计算的准确性。有关此池的更多详细信息,请参阅线程池

2. 示例

请参阅慢速消费者示例,其中展示了如何使用 Apache ActiveMQ Artemis 检测慢速消费者。