消费者调度异步

功能 > 消费者功能 > 消费者调度异步

概述

从 ActiveMQ Classic v4 开始,经纪人执行同步或异步调度到消费者的选择变得更加可配置。现在它被配置为 连接 URI、连接和连接工厂 上的默认值,并且可以通过 目标选项 在每个消费者基础上进行自定义,而不是以前仅仅是传输服务器设置。

这样做更有意义,因为您希望对较慢的消费者进行异步消息传递,但对较快的消费者进行同步消息传递(以避免添加另一个 SEDA 队列的同步和上下文切换成本)。使用同步消息传递的缺点是,如果有一个他正在向其调度消息的缓慢消费者,则生产者更有可能阻塞。

默认设置是 dispatchAsync=true,这是高性能的最佳设置。如果您希望更好地处理缓慢的消费者,则需要启用此设置。如果您希望获得更高的吞吐量并且缓慢消费者的可能性很低,则可能需要将其更改为 dispatchAsync=false

在连接工厂级别配置异步调度

((ActiveMQConnectionFactory)connectionFactory).setDispatchAsync(false);

在连接级别配置调度异步

在该级别配置 dispatchAsync 设置将覆盖连接工厂级别的设置。

使用目标 URI 在消费者级别配置调度异步

使用 目标选项 配置 dispatchAsync 将覆盖连接和连接工厂级别的设置。

queue = new ActiveMQQueue("TEST.QUEUE?consumer.dispatchAsync=false");
consumer = session.createConsumer(queue);

在代理的传输连接器上禁用异步调度

可以通过 disableAsyncDispatch 属性在特定传输连接器上禁用异步调度。一旦为此传输禁用,则无法由单个客户端启用。

<transportConnector name="openwire" uri="tcp://0.0.0.0:61616" disableAsyncDispatch="true"/>

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛徽标和 Apache ActiveMQ 项目徽标是 Apache 软件基金会的商标。版权所有 © 2024,Apache 软件基金会。根据 Apache 许可证 2.0 授权。