退出侦听器应用程序时ActiveMQ中的SocketException

时间:2009-06-09 17:29:00

标签: java spring tomcat jms activemq

我目前正在设置运行嵌入式ActiveMQ代理的Tomcat服务器。我正在使用Spring来配置JMS。我编写了一个测试应用程序来监听主题,当我退出测试应用程序时,ActiveMQ代理抛出一个SocketException。这是一个例外:

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一般都很陌生,所以任何想法都会受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

我认为有一种方法可以通过方法调用很好地关闭嵌入式代理。将您的配置与嵌入代码一起发布将有助于人们弄清楚正在发生的事情。

答案 1 :(得分:0)

我建议你查看Spring的JmsTemplates;它将MQ的所有复杂性包装到一个漂亮的包中,并确保像这样的小错误不会导致数小时的问题。

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