2015-09-11 28 views
2

消息是否有与asyncSend设置为true发送持久性消息最佳实践或指导。发送大量使用春天JmsTemplate的

我们没有事务管理器配置

我们有正在使用JmsTemplate的发送配置了

org.apache.activemq.pool.PooledConnectionFactory 

〜40K-50K的消息我们已经for循环它迭代消息列表,并将它们发送使用

jmsTemplate.convertAndSend(destination, msg) 

我们看到很多频繁的基础上消息丢失的,当我们关闭asyncSend我们得到的可靠性,但在p roducer性能95%

+0

它是相同的,当你使用它在本地主机上?我会尝试与其他JMS提供商一起测试以缩小通信的哪个方面存在问题(如果它不是一些较低级别的问题:例如传输层)。 – luboskrnac

+0

@Ikrnac没有生产者Java客户端,activemq代理坐落在不同的物理盒子上。这可能是一个传输层问题,我同意,我看到有什么最好的方式,以良好的可靠性与体面的表现 – blob

+0

我建议一些调查方法。为了证明它不是传输层,找到它们在同一台机器上。如果它不是传输层,则更改JMS提供程序(例如HornetQ易于使用)以查明Spring或ActiveMQ是否导致问题。 – luboskrnac

回答

1

下降的炒作有点作为的问题不是很详细,但无论如何。

根据配置,ActiveMQ的可能对队列内存限制(可能持久性和非持久性消息之间以及不同)。因此,当内存用完时,您的电话将忽略警告并继续将消息传递到“黑洞”,直到消费者释放内存为止。

没有银弹,允许最大的性能和可靠性最高。不幸。

不过,我会尝试连接工厂设置producerWindowSize,使数据的一些规定量接收到一个经纪人ACK之前。确切的价值是你需要尝试的,取决于场景以及经纪人配置/资源。

+0

一旦我设置“producerWindowSize”,制作人会等待接收所有以前发送的消息的确认吗? – blob

+1

ProducerWindowSize帮助我们,在峰值负载下几乎没有消息丢失。谢谢 – blob