我正在開發一個系統集成主題的小型項目,並且正在使用JMS(JBOSS)。我們必須使用耐用的話題,而這一部分非常簡單。假設我使用下面的代碼:無法在持久訂閱上創建訂閱
TopicConnectionFactory topicConnectionFactory = InitialContext.doLookup("jms/RemoteConnectionFactory");
try(JMSContext jmsContext = topicConnectionFactory.createContext(<username>,<password>)) {
Topic topic = InitialContext.doLookup(<topic>);
JMSConsumer jmsConsumer = jmsContext.createDurableConsumer(topic, <client-id>);
Message message = jmsConsumer.receive();
if(message != null) {
result = message.getBody(ArrayList.class);
}
}
這種try-with-resources是有用的,因爲它在塊結束時破壞連接。但假設我在JMSConsumer等待消息時中斷程序。當我重新啓動該程序,它會拋出:
javax.jms.IllegalStateRuntimeException: Cannot create a subscriber on the durable subscription since it already has subscriber(s)
有沒有辦法關閉連接/取消/某物的程序被中斷時?
你能抓住interruptedexception,做一些清理,然後重新拋出嗎? –
我試着添加一個ShutdownHook,但它不起作用。我會再次檢查文檔,我可能會試圖以錯誤的方式關閉連接,我不知道。 – Budgerous