异步发送

功能 > 消息分发功能 > 异步发送

背景

ActiveMQ Classic 支持以同步或异步模式向代理发送消息。使用的模式对发送调用的延迟有重大影响。由于延迟通常是生产者能够实现的吞吐量的一个重要因素,因此使用异步发送可以显着提高系统的性能。

好消息是 ActiveMQ Classic 在几种情况下默认以异步模式发送消息。只有在 JMS 规范要求使用同步发送的情况下,我们才会默认使用同步发送。我们被迫以同步模式发送的情况是在事务之外发送持久消息时。

如果您没有使用事务并且正在发送持久消息,那么每次发送都是同步的,并且会阻塞,直到代理向生产者发送确认消息,确认消息已安全地持久化到磁盘。此确认提供了消息不会丢失的保证,但它也会带来巨大的延迟损失,因为客户端处于阻塞状态。

许多高性能应用程序被设计为能够在故障情况下容忍少量消息丢失。如果您的应用程序是这样设计的,则可以启用异步发送的使用,即使使用持久消息,也可以提高吞吐量。

使用连接 URI 配置异步发送

您可以使用 连接配置 URI 来配置异步发送,如下所示

cf = new ActiveMQConnectionFactory("tcp://locahost:61616?jms.useAsyncSend=true");

在 ConnectionFactory 级别配置异步发送

您可以使用该属性在 ActiveMQConnectionFactory 对象上启用此功能。

((ActiveMQConnectionFactory)connectionFactory).setUseAsyncSend(true);

在连接级别配置异步发送

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

您可以使用该属性在 ActiveMQConnection 对象上启用此功能。

((ActiveMQConnection)connection).setUseAsyncSend(true);

另请参见

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