使用ActiveMQ v 5.8
我正在使用javax.jms.MessageProducer.send()将生产者的消息发送到ActiveMQ。
我想知道这个发送是同步还是异步?如果我做" useAsyncSend"那会是什么行为?标志为真?
谢谢, Anuj
答案 0 :(得分:2)
默认情况下,ActiveMQ会在几种情况下以异步模式发送消息。只有在JMS规范要求使用同步发送的情况下,我们才会默认同步发送。我们被迫以同步模式发送的情况是在事务之外发送持久性消息。
如果您没有使用事务并且正在发送持久性消息,则每个发送都是同步并阻塞,直到代理向生产者发回确认消息已安全地持久保存到磁盘。此ack保证消息不会丢失,但由于客户端被阻止,因此也会造成巨大的延迟损失。
请参阅ActiveMQ上的documentation。
答案 1 :(得分:0)
是的,默认情况下send()是同步的(对于持久队列/主题,否则为异步)并且将阻塞直到收到ACK ...
带useAsyncSend=true
的不会阻止...
每http://activemq.apache.org/connection-configuration-uri.html
Async Sends增加了巨大的性能提升;但意味着send()方法将立即返回消息是否已发送,这可能导致消息丢失。