消费者调度异步
概述
从 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"/>