【发布时间】:2018-10-17 01:14:41
【问题描述】:
我们使用 solace 作为模块和子系统之间的消息总线。我们的应用程序建立在 Spring Boot 和 Spring 集成(消息驱动通道适配器、DefaultMessageListenerContainer、CachingConnectionFactory)之上。
我们观察到每隔几天就会出现 10-15 分钟的随机缓慢。在某些基于日志的情况下,只有从模块 1 的发送者到模块 2 的接收者需要 15 分钟,并且两者之间也没有服务激活器。
有人遇到过类似的问题吗?关于解决此问题的任何建议?
【问题讨论】:
-
我建议为
org.springframework.integration类别打开DEBUG日志记录级别。这样你会看到很多preSend和postSend以及其他一些 Spring Integration 有用的日志。这应该会给你一些线索,你的系统卡在哪里。还要确保内存和 GC 一切正常。在这件事上使用 Visual VM。 -
感谢Artem的好建议,我会启用特定jms包的调试日志。对于内存大小,我已经验证它远低于最大限制。我也验证了这段时间内的负载,可以忽略不计。
-
在我们的代码中,我们使用 CachingConnectionFactory 的动态缩放。这可能是该线程link 中解释的潜在问题
-
日志也确认了相同的行为。假设 Listener-4 在 12:01 使用,并在 12:17 再次使用,在其未使用之间。似乎 Listener-4 消费了消息,但由于 CachingConnectionFactory 中的缓存,并没有真正将消息传递给通道适配器。
标签: java performance spring-boot spring-integration spring-jms