2016-09-21 63 views
1

我正在運行帶有嵌入式ActiveMQ服務器(5.10.0)的Spring Boot(1.3.5)控制檯應用程序,該應用程序對於接收消息來說工作得很好。但是,我無法在沒有例外的情況下關閉應用程序。關閉Apache ActiveMQ

此異常爲每個隊列扔一次,按Ctrl-C後:

2016-09-21 15:46:36.561 ERROR 18275 --- [update]] o.apache.activemq.broker.BrokerService : Failed to start Apache ActiveMQ ([my-mq-server, null], {}) 

java.lang.IllegalStateException: Shutdown in progress 
    at java.lang.ApplicationShutdownHooks.add(ApplicationShutdownHooks.java:66) 
    at java.lang.Runtime.addShutdownHook(Runtime.java:211) 
    at org.apache.activemq.broker.BrokerService.addShutdownHook(BrokerService.java:2446) 
    at org.apache.activemq.broker.BrokerService.doStartBroker(BrokerService.java:693) 
    at org.apache.activemq.broker.BrokerService.startBroker(BrokerService.java:684) 
    at org.apache.activemq.broker.BrokerService.start(BrokerService.java:605) 
    at org.apache.activemq.transport.vm.VMTransportFactory.doCompositeConnect(VMTransportFactory.java:127) 
    at org.apache.activemq.transport.vm.VMTransportFactory.doConnect(VMTransportFactory.java:56) 
    at org.apache.activemq.transport.TransportFactory.connect(TransportFactory.java:65) 
    at org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQConnectionFactory.java:314) 
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:329) 
    at org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection(ActiveMQConnectionFactory.java:302) 
    at org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveMQConnectionFactory.java:242) 
    at org.apache.activemq.jms.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:283) 
    at org.apache.activemq.jms.pool.PooledConnectionFactory$1.makeObject(PooledConnectionFactory.java:96) 
    at org.apache.activemq.jms.pool.PooledConnectionFactory$1.makeObject(PooledConnectionFactory.java:93) 
    at org.apache.commons.pool2.impl.GenericKeyedObjectPool.create(GenericKeyedObjectPool.java:1041) 
    at org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:357) 
    at org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:279) 
    at org.apache.activemq.jms.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:243) 
    at org.apache.activemq.jms.pool.PooledConnectionFactory.createConnection(PooledConnectionFactory.java:212) 
    at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:180) 
    at org.springframework.jms.listener.AbstractJmsListeningContainer.createSharedConnection(AbstractJmsListeningContainer.java:413) 
    at org.springframework.jms.listener.AbstractJmsListeningContainer.refreshSharedConnection(AbstractJmsListeningContainer.java:398) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful(DefaultMessageListenerContainer.java:925) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer.recoverAfterListenerSetupFailure(DefaultMessageListenerContainer.java:899) 
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1075) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 
2016-09-21 15:46:36.564 INFO 18275 --- [update]] o.apache.activemq.broker.BrokerService : Apache ActiveMQ 5.12.3 (my-mq-server, null) is shutting down 

它似乎使用DefaultMessageListenerContainer試圖啓動一個ActiveMQ的服務器,即沒有道理給我。我已經將BrokerService的階段設置爲Integer.MAX_INT - 1,並且將DefaultJmsListeningContainerFactory的階段設置爲Integer.MAX_INT,以在ActiveMQ服務器停止之前使其消失。

我有這個在我的主要():

public static void main(String[] args) { 
    final ConfigurableApplicationContext context = SpringApplication.run(SiteServer.class, args); 
    context.registerShutdownHook(); 
} 

我試過的建議在這裏設置守護進程爲true:Properly Shutting Down ActiveMQ and Spring DefaultMessageListenerContainer

任何想法?謝謝! =)

+0

'run()'可能會阻塞,直到輸入CTRL-C(可能是因爲SiteServer正在做什麼?)。您需要使用http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/SpringApplication.html中的第二個示例對其進行分割 – Gus

回答

0

找到它。當駝峯上下文在 BrokerService之後關閉時發生此問題。添加適當的生命週期管理,以便在解決問題之前關閉駱駝。現在一切都以乾淨的方式關閉,沒有錯誤。