NMS.ActiveMQ 异步发送
背景
Apache.NMS.ActiveMQ 支持以同步或异步模式将消息发送到代理。使用的模式对发送调用的延迟有很大影响。由于延迟通常是生产者可实现的吞吐量的一个重要因素,因此使用异步发送可以显着提高系统性能。
好消息是,Apache.NMS.ActiveMQ 在几种情况下默认以异步模式发送消息。只有在 JMS 规范要求使用同步发送的情况下,我们才默认使用同步发送。我们被迫以同步模式发送的情况是在事务之外发送持久消息时。
如果您没有使用事务并且正在发送持久消息,那么每次发送都是同步的,并且会阻塞,直到代理将确认消息已安全地持久存储到磁盘的确认发送回生产者。此确认提供消息不会丢失的保证,但它也会带来巨大的延迟损失,因为客户端被阻塞。
许多高性能应用程序被设计为在故障情况下容忍少量消息丢失。如果您的应用程序已按此方式设计,则即使使用持久消息,您也可以启用异步发送的使用以提高吞吐量。
使用连接 URI 配置异步发送
您可以使用 连接配置 URI 配置异步发送,如下所示
var cf = new ConnectionFactory("tcp://locahost:61616?nms.AsyncSend=true");
在 ConnectionFactory 级别配置异步发送
您可以使用属性在 Apache.NMS.ActiveMQ.ConnectionFactory 对象上启用此功能。
((ConnectionFactory)connectionFactory).AsyncSend = true;
在连接级别配置异步调度
在此级别配置异步发送设置将覆盖连接工厂级别的设置。
您可以使用属性在 Apache.NMS.ActiveMQ.Connection 对象上启用此功能。
((Apache.NMS.ActiveMQ.Connection)connection).AsyncSend = true;