我有一个wso2 ESB与activeMQ(持久消息传递)交谈。有时,ESB上的线程会堆叠起来,因为所有线程都在等待activeMQ响应对它进行的各种调用。最终调用错误。
同时在ActiveMQ日志中,我看到很多"慢卡哈数据库访问"日志。一些例子:
这是我们系统中的一个大问题,因为一旦AMQ足够快地停止响应,我们就会锁定线程。似乎因为IO /访问花了这么长时间,activeMQ停止响应我们的ESB。由于我们继续尝试在ActiveMQ(预期功能)上对消息进行排队,因此我们使用越来越多的线程来打开越来越多的连接,直到线程被最大化为止。
几分钟线程后,我们发布的activeMQ再次响应,但到那时我们的系统为时已晚,因为ESB因备份流量和activeMQ冻结而失控。
任何人都面临同样的问题?任何人都可以提供有关如何解决此问题的任何信息表示赞赏。
由于
答案 0 :(得分:0)
除非您绝对需要持久性,否则您可以尝试发送非持久性消息并将代理更改为非持久性。有关执行此操作的确切步骤,请参阅ActiveMQ documentation。在这种情况下,代理不会将任何消息写入磁盘,而只将它们保留在内存中。但是,如果代理崩溃,则表示这些消息丢失了。
否则,我建议您直接通过更换硬件来解决IO性能,或者切换到clustered ActiveMQ deployment以更均匀地分散负载。