是否存在将asyncSend
设置为true的持久性消息的最佳做法或指导。
我们没有配置事务管理器
我们有~40k-50k消息,使用配置了
的jmsTemplate发送org.apache.activemq.pool.PooledConnectionFactory
我们有一个for循环,它遍历消息列表并使用
发送它们jmsTemplate.convertAndSend(destination, msg)
我们经常看到很多消息丢失,当我们关闭asyncSend
时,我们获得了可靠性,但生产者性能下降了95%
答案 0 :(得分:1)
有点猜测,因为问题不是很详细,但无论如何。
根据配置,ActiveMQ可能对队列有内存限制(持久性和非持久性消息之间也可能不同)。因此,当内存启动时,您的asyncSend
来电将忽略警告,并继续向黑洞"黑洞"直到消费者释放内存。
没有灵丹妙药可以实现最高性能和最高可靠性。不幸的是
但是,我会尝试在连接工厂上设置producerWindowSize
,以便在收到代理确认之前允许一些指定数量的数据。您需要尝试确切的值,具体取决于场景以及代理配置/资源。