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;

另请参见

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