2009-06-09 1 views
0

В настоящее время я настрою сервер Tomcat, на котором запущен встроенный брокер ActiveMQ. Я использую Spring для настройки JMS. Я написал тестовое приложение для прослушивания тем, и когда я выхожу из тестового приложения, брокер ActiveMQ выдает исключение SocketException. Вот за исключением:SocketException в ActiveMQ при выходе из приложения-слушателя

2009-06-09 13:12:48,005 DEBUG Transport:229 - Transport failed: java.net.SocketException: Connection reset 
java.net.SocketException: Connection reset 
     at java.net.SocketInputStream.read(SocketInputStream.java:168) 
     at org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill(TcpBufferedInputStream.java:50) 
     at org.apache.activemq.transport.tcp.TcpBufferedInputStream.read(TcpBufferedInputStream.java:58) 
     at java.io.DataInputStream.readInt(DataInputStream.java:370) 
     at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:269) 
     at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:210) 
     at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:202) 
     at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185) 
     at java.lang.Thread.run(Thread.java:619) 

Мое тестовое приложение просто загружает контекстный xml-файл, петли спят каждые 60 секунд.

public static void main(String[] args) { 
     long numMillisecondsToSleep = 60000; 
     new ClassPathXmlApplicationContext("client-context.xml"); 

     while (true) { 
      try { 
       logger.info("Sleeping for 60 seconds"); 
       Thread.sleep(numMillisecondsToSleep); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

Мне было интересно, может ли кто-нибудь узнать, почему я получаю это исключение. Я очень новичок в ActiveMQ и JMS в целом, поэтому любые идеи будут высоко оценены.

ответ

0

Я думаю, что есть способ закрыть встроенный брокер с помощью вызова метода. Проводка вашей конфигурации вместе с вашим кодом внедрения поможет людям понять, что происходит.

+0

Я понял это. Мне нужно вызвать close() в объекте ClassPathXmlApplicationContext до завершения тестовой программы. Это позволит пружине правильно закрыть прослушиватели сообщений и соединения, которые были созданы для использования сообщений с брокером ActiveMQ. – 2009-06-10 18:59:09

+0

Хорошо. у вас, вероятно, есть методы init/destroy, указанные в вашем Spring XML для связанных с ActiveMQ материалов? В этом есть смысл. – ShabbyDoo

0

Я бы рекомендовал обратиться к Spring JmsTemplates; он обертывает всю сложность MQ в приятный пакет и обеспечивает небольшие ошибки, подобные этому, и не вызывает много проблем.

http://activemq.apache.org/spring-support.html

Смежные вопросы