原文地址
http://activemq.apache.org/async-sends
背景
ActiveMQ支持发送消息到broker用同步或者异步的方式。所使用的模式对发送调用的延迟有很大的影响。因为延迟通常是生产者可以达到的吞吐量的一个巨大因素,所有异步发送乐意显著的提高你的系统的性能。
好的消息是,activeMQ在一起情况下默认使用异步模式发送消息。只有JMS规范要求使用同步发送情况下,我们才默认进行同步发送。
当持久化的消息在没有使用事务发送的情况下,我们会迫使使用同步模式发送。
如果你没有使用事务和发送持久化消息,所有发送将是同步并且是阻塞的,直到broker返回一个这个消息已经被安全的持久化磁盘上了的确认(ack)给生产者。这个确认(ack)提供了消息不会丢失的保障,但由于客户端被阻塞,它也产生了巨大延迟代价
许多高性能的应用被设计成在失败的场景中容忍少量消息丢失。如果的应用是符合这种设计,你将可以使用异步发送来增加吞吐量,甚至是持久化的消息。
使用连接URI配置异步投递
你能使用连接配置URI来配置异步投递,如下所示
cf = new ActiveMQConnectionFactory("tcp://locahost:61616?jms.useAsyncSend=true");
在ConnectionFactory级别配置异步投递
在ActiveMQConnectionFactory对象上设置这个属性你能启用这个功能
((ActiveMQConnectionFactory)connectionFactory).setUseAsyncSend(true);
在Connection级别配置异步投递
在这个级别上配置异步投递将覆盖connection factory级别的设置
在ActiveMQConnection对象上设置这个属性你能启用这个功能
((ActiveMQConnection)connection).setUseAsyncSend(true);