我现在的项目遇到一个问题,当网络环境不好的时候会出现服务无响应。经过分析发现,每次网络断开再重新连接后客户端都会与MQ Server创建一个新的连接,而原来的老的通道上的连接在服务器的管理页面上仍然可以看到。此时如果有新的消息进来就会首先发到老的连接上的通道里,在消息服务器管理页面上可以看到Unacked的消息在老的Connection的Channel上。然后经过几分钟后老的连接才会消失,消息会被自动转到新建立的连接的通道上。可是如果网络反复断开连上,就会出现很多无效的连接,这时候消息会经过很久才能够被客户端收到。以上是由消息进入时的情况,如果没有消息进入,老的失效连接会永远留在那里。请问这是什么地方出现的问题?是服务端的配置,还是客户端建立连接设置的属性?怎么样才能避免这种情况发生,使得无效的连接能快速的被删掉?谢谢!

解决方案 »

  1.   


    设置服务端的,你的问题是客户端不发,服务器端就一直再等待。谢谢!我看了一下客户端代码connection = connectionFactory.newConnection (knownHosts);
    这里面connectionFactory.connectionTimeout=0,我查API手册,里面解释0表示永远等待。大概就是这个意思了。这就是说是可以在客户端设置的,可是应该怎么修改这个值呢?JAVA DOC手册里面ConnectionFactory这个类没有connectionTimeout这个成员变量啊。里面只有public static final int DEFAULT_CONNECTION_TIMEOUT,可是这个是final没法修改啊。我试着在IDE里面直接修改了connectionTimeout的值,居然通过了。为什么JAVADoc里面不说明呢?JAVADoc里面怎么才能察看一个类可修改的属性呢?
      

  2.   

    对不起看到setConnectionTimeout方法了,我还以为两年没用JAVA,他们写文档的方式都变了呢,呵呵!