2017-08-17 135 views
0

我是ActiveMQ的新手。我在我的应用程序中实现了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 

回答

0

解决方法是简单的,改变你的日志记录设置调试级别不写或筛选一个记录器不会在调试级别。日志会保持您更新的事实,即客户端正在成功ping通远程代理以确保连接处于活动状态。如果你禁用了监控,那么你可能会错过连接丢失事件,像半封闭的插座等。

在生产中,你真的不想关闭连接检查功能,导致你的代码错过了这一事实无法收到任何东西

0

谢谢Tim的建议。我将此日志记录移至WARN级别。

<logger name="org.apache.activemq.transport" level="WARN"/> 
相关问题