![](/img/trans.png)
[英]ActiveMQ InactivityMonitor params not applied on HTTP Transport connection
[英]How to disable InactivityMonitor logs in ActiveMQ?
我已經在我的應用程序中實現了 ActiveMQ 消息代理,但是每當我在控制台日志中連接到 ActiveMQ 服務器時,我總是看到以下消息:
10:28:05.282 [ActiveMQ InactivityMonitor WriteCheckTimer] DEBUG o.a.a.t.AbstractInactivityMonitor - WriteChecker: 10000ms elapsed since last write check.
10:28:05.282 [ActiveMQ InactivityMonitor Worker] DEBUG o.a.a.t.AbstractInactivityMonitor - Running WriteCheck[tcp://10.211.127.203:61616]
看起來它似乎繼續輪詢偵聽器隊列。 我希望我的偵聽器處於活動狀態,以便每當消息進入隊列時,應用程序都可以處理它。 同時,我不希望此消息堆積在我的日志文件中。
我的消息配置:
@Configuration
@EnableJms
@ImportResource("classpath*:beans.xml")
public class MessagingConfiguration {
@Autowired
MongoCredentialEncryptor encryptor;
@Value("${activemq.broker.url}")
private String BROKER_URL = "tcp://localhost:61616";
@Value("${activemq.request.queue}")
private String REQUEST_QUEUE = "test.request";
@Value("${activemq.response.queue}")
private String RESPONSE_QUEUE = "test.response";
@Value("${activemq.borker.username}")
private String BROKER_USERNAME = "admin";
@Value("${activemq.borker.password}")
private String BROKER_PASSWORD = "admin";
@Autowired
ListenerClass messageListener;
@Autowired
JmsExceptionListener jmsExceptionListener;
@Bean
public ActiveMQConnectionFactory connectionFactory() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(BROKER_URL);
connectionFactory.setUserName(BROKER_USERNAME);
//connectionFactory.setPassword(BROKER_PASSWORD);
connectionFactory.setPassword(encryptor.decrypt(BROKER_PASSWORD));
connectionFactory.setTrustAllPackages(true);
connectionFactory.setRedeliveryPolicy(redeliveryPolicy());
return connectionFactory;
}
@Bean
public RedeliveryPolicy redeliveryPolicy() {
RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
redeliveryPolicy.setBackOffMultiplier(3); // Wait 5 seconds first re-delivery, then 15, 45 seconds
redeliveryPolicy.setInitialRedeliveryDelay(5000);
redeliveryPolicy.setMaximumRedeliveries(3);
redeliveryPolicy.setUseExponentialBackOff(true);
return redeliveryPolicy;
}
@Bean
public ConnectionFactory cachingConnectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setTargetConnectionFactory(connectionFactory());
connectionFactory.setExceptionListener(jmsExceptionListener);
connectionFactory.setSessionCacheSize(100);
connectionFactory.setCacheConsumers(false);
connectionFactory.setCacheProducers(false);
return connectionFactory;
}
@Bean
public JmsTemplate jmsTemplate() {
JmsTemplate template = new JmsTemplate();
template.setConnectionFactory(connectionFactory());
template.setDefaultDestinationName(REQUEST_QUEUE);
template.setSessionAcknowledgeModeName("CLIENT_ACKNOWLEDGE");
template.setMessageConverter(converter());
return template;
}
@Bean
public DefaultMessageListenerContainer jmsListenerContainer() {
DefaultMessageListenerContainer factory = new DefaultMessageListenerContainer();
factory.setConnectionFactory(connectionFactory());
factory.setConcurrency("1-1");
factory.setDestinationName(RESPONSE_QUEUE);
factory.setMessageListener(messageListener);
factory.setExceptionListener(jmsExceptionListener);
return factory;
}
@Bean
MessageConverter converter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
}
解決方案:我通過點擊此鏈接ActiveMQ InactivityMonitor禁用 InactivityMonitor 找到了解決我的問題的方法。 我測試了它連接仍然存在並且它不會繼續輪詢隊列。 但我想知道禁用 InactivityMonitor 會不會有任何問題? 這個問題有沒有更好的解決方案。
activemq.broker.url=failover:tcp://localhost:61616?wireFormat.maxInactivityDuration=0
修復方法很簡單,將您的日志記錄設置更改為不在調試級別寫入,或者將某個記錄器過濾為不在調試級別。 日志讓您了解客戶端成功 ping 遠程代理以確保連接有效的事實。 如果您禁用監控,那么您可能會錯過連接丟棄事件,例如半關閉的套接字等。
在生產中,您真的不想關閉連接檢查功能,這會導致您的代碼錯過它無法接收任何內容的事實
示例配置修改:
<logger name="org.apache.activemq.transport" level="WARN"/>
如果打印此日志沒有任何害處, InactivityMonitor
只是檢查代理和客戶端之間的連接是否處於活動狀態。
如果發現連接在給定時間內處於非活動狀態,則InactivityMonitor
關閉客戶端和代理之間的連接。
我們可以通過在 activemq.xml 文件的 transportConnectors 部分的 tcp URL 中指定wireFormat.maxInactivityDuration="<time in ms>"
來設置InactivityMonitor
的超時wireFormat.maxInactivityDuration="<time in ms>"
。
有關詳細信息,請訪問: InactivityMonitor
謝謝蒂姆的建議。 我將此日志記錄移至WARN級別。
<logger name="org.apache.activemq.transport" level="WARN"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.