8.4. 处理慢速消费者
缓慢的消费者需要花费大量时间来处理每条消息。在这些情况下,不建议在客户端上缓冲消息。相反,消息仍保留在代理中,以供其他消费者使用。关闭缓冲区的一个好处在于,它提供队列中多个使用者之间的确定性分配。要通过禁用客户端缓冲区来处理缓慢的消费者,请将窗口大小设置为 0。
为较慢的用户设置窗口大小
以下示例演示了如何使用 AMQ 核心协议 JMS 客户端(消息使用者较慢)将窗口大小设置为 0。
流程
如果客户端使用 JNDI 来实例化其连接工厂,在连接字符串 URL 中包括
consumerWindowSize参数。将 URL 存储在 JNDI 上下文环境中。以下示例使用jndi.properties文件存储 URL。java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory connectionFactory.myConnectionFactory=tcp://localhost:61616?consumerWindowSize=0
java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory connectionFactory.myConnectionFactory=tcp://localhost:61616?consumerWindowSize=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果客户端不使用 JNDI 来实例化其连接工厂,请将值传递给
ActiveMQConnectionFactory.setConsumerWindowSize()。ConnectionFactory cf = ActiveMQJMSClient.createConnectionFactory(...) cf.setConsumerWindowSize(0);
ConnectionFactory cf = ActiveMQJMSClient.createConnectionFactory(...) cf.setConsumerWindowSize(0);Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
请参阅 <install-dir>/examples/standard 中的 no-consumer-buffering 示例,它演示了如何在处理慢速消费者时配置代理以防止消费者缓冲。