ActiveMQ消息发送主题

时间:2014-06-19 14:56:21

标签: activemq

使用ActiveMQ v 5.8

我正在使用javax.jms.MessageProducer.send()将生产者的消息发送到ActiveMQ。

我想知道这个发送是同步还是异步?如果我做" useAsyncSend"那会是什么行为?标志为真?

谢谢, Anuj

2 个答案:

答案 0 :(得分:2)

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

如果您没有使用事务并且正在发送持久性消息,则每个发送都是同步并阻塞,直到代理向生产者发回确认消息已安全地持久保存到磁盘。此ack保证消息不会丢失,但由于客户端被阻止,因此也会造成巨大的延迟损失。

请参阅ActiveMQ上的documentation

答案 1 :(得分:0)

是的,默认情况下send()是同步的(对于持久队列/主题,否则为异步)并且将阻塞直到收到ACK ...

useAsyncSend=true

不会阻止...

http://activemq.apache.org/connection-configuration-uri.html

  

Async Sends增加了巨大的性能提升;但意味着send()方法将立即返回消息是否已发送,这可能导致消息丢失。