【发布时间】:2021-09-06 19:24:12
【问题描述】:
目前,我的应用程序接收到非常低的流量 1-2 请求/秒,这些流量被发送到 JMS 队列。但是在artemis.log 中,我看到了以下WARN 消息。
2021-06-23 10:51:49,433 WARN [org.apache.activemq.artemis.core.server] AMQ222061: Client connection failed, clearing up resources for session d798a4d3-d3f7-11eb-86d7-005056b536f0
2021-06-23 10:51:49,434 WARN [org.apache.activemq.artemis.core.server] AMQ222107: Cleared up resources for session d798a4d3-d3f7-11eb-86d7-005056b536f0
2021-06-23 10:51:49,434 WARN [org.apache.activemq.artemis.core.server] AMQ222061: Client connection failed, clearing up resources for session d798cbe4-d3f7-11eb-86d7-005056b536f0
2021-06-23 10:51:49,435 WARN [org.apache.activemq.artemis.core.server] AMQ222107: Cleared up resources for session d798cbe4-d3f7-11eb-86d7-005056b536f0
Artemis 日志由 NFS 支持,所有消息都被持久化。我正在使用 Spring 的 JmsTemplate 和 JmsPoolConnectionFactory。
@Bean
public ConnectionFactory jmsConnectionFactoryOnline() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl,username,password);
connectionFactory.setCallTimeout(3000);
return connectionFactory;
}
@Bean
@Primary
public JmsPoolConnectionFactory pooledConnectionFactory() {
JmsPoolConnectionFactory poolingFactory = new JmsPoolConnectionFactory();
poolingFactory.setConnectionFactory(jmsConnectionFactoryOnline());
poolingFactory.setMaxConnections(8);
poolingFactory.setMaxSessionsPerConnection(20);
poolingFactory.setConnectionIdleTimeout(0);
return poolingFactory;
}
知道为什么会有这么多断开连接(它们每 15 分钟重复一次)以及如何调试它?
在客户端级别,我收到以下警告,但 3 秒似乎很长,因为代理已启动并接受其他消息:
23-06-2021 09:33:15 [Thread-24 (ActiveMQ-client-global-threads)] [WARN ] org.apache.activemq.artemis.core.client - AMQ212037: Connection failure to XXXXXX:61616 has been detected: AMQ219014: Timed out after waiting 3,000 ms for response when sending packet 71 [code=CONNECTION_TIMEDOUT]
编辑
我每 3 秒进行一次线程转储。相关信息请查看here。
监控推送到队列的延迟我可以清楚地看到,在 1 个请求/秒的情况下,我有延迟峰值,而在 20 个请求/秒的情况下,推送到队列的延迟似乎是正常的,如下图所示。
同样从 tcpdump 我可以看到客户端和代理之间存在暂停。他们之间似乎没有流量交换。 因此,一旦 callTimeout 时间过去,客户端就会关闭连接。
【问题讨论】:
标签: spring-jms activemq-artemis