在主题上发送ActiveMQ消息

在主题上发送ActiveMQ消息,activemq,Activemq,使用ActiveMQV5.8 我正在使用javax.jms.MessageProducer.send()将消息从我的生产者发送到ActiveMQ 我想知道这个发送是同步的还是异步的?如果我将“UseAncyncSend”标志设置为true,会发生什么行为 谢谢, Anuj是的,默认情况下,send()是同步的(对于持久队列/主题,则为异步),并将一直阻止,直到收到ACK为止 使用useAncySend=true将不会阻止 异步发送增加了巨大的性能提升;但这意味着send()方法将立即返回消息是

使用ActiveMQV5.8

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

我想知道这个发送是同步的还是异步的?如果我将“UseAncyncSend”标志设置为true,会发生什么行为

谢谢, Anuj

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

使用
useAncySend=true
将不会阻止

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


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

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


请参阅ActiveMQ上的。即使我向主题发送非持久性消息,发送也将是同步的?只有在我使用UseAncyncSend=True时发送是异步的情况下默认情况下,持久化处于启用状态,并且send()是同步的…要更改此情况,您可以将其设置为非持久性,也可以将UseAncyncSend=True设置感谢快速响应。正如您所指定的,如果我想要异步消息发送,(I)我应该使用非持久性消息,或者(ii)我可以将UseAncyncSend设置为true。只是想了解这两种情况之间的区别?它会阻止生产者还是消费者?我已经在使用非持久性消息,而不是使用事务。在这种情况下,发送呼叫是否阻塞?如果是,那么在什么级别上,是等待代理发送确认,还是只等待消息进入socketBuffer?我不知道如何更清楚地回答,您看过文档了吗?除非您另行配置,否则非持久性消息是异步发送的。异步发送意味着一旦字节写入套接字,我们就返回,并且不保证它会到达代理。谢谢Tim。我明白这一点。我只是想知道“发送带有或不带有异步标志的非持久性消息有什么区别吗?”不,对于已经异步发送的消息,异步发送标志不会使它们更加异步。