Tibjms javax.jms.JMSException:服务器未知连接

N..*_*N.. 0 java tibco jms tibco-ems

我使用Tibjms jar 进行 JMS 连接,在正常情况下工作正常,但如果与 jms 提供程序的连接丢失然后又恢复,我就会遇到问题。为了重现该问题,我执行了以下步骤 -

  1. 连接内网并启动服务器。工作正常。

  2. 断开与内联网的连接。它开始尝试重新连接服务器。美好的。

  3. 再次连接内网。它抛出未知异常并且再也不会连接。问题。

所以,我的问题是“javax.jms.JMSException:服务器未知的连接”,它并没有告诉我太多信息,您可以在日志末尾看到它。

您可以从以下日志中看到它 -

2017-10-13 15:40:52,333 [     http-nio-8080-exec-2] INFO  org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization completed in 37 ms
2017-10-13 15:41:29,293 [k Reader (Server-3285015)] ERROR com.example.jms.PaxJmsClient - Exception received from jms
javax.jms.JMSException: Disconnected from ssl://10.10.10.10:5071, will attempt to reconnect
    at com.tibco.tibjms.TibjmsConnection._invokeOnExceptionCallback(TibjmsConnection.java:2132)
    at com.tibco.tibjms.TibjmsConnection._reconnect(TibjmsConnection.java:1912)
    at com.tibco.tibjms.TibjmsConnection$ServerLinkEventHandler.onEventReconnect(TibjmsConnection.java:387)
    at com.tibco.tibjms.TibjmsxLinkTcp._doReconnect(TibjmsxLinkTcp.java:598)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.work(TibjmsxLinkTcp.java:317)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.run(TibjmsxLinkTcp.java:259)
2017-10-13 15:42:29,334 [k Reader (Server-3285015)] ERROR com.example.jms.PaxJmsClient - Exception received from jms
javax.jms.JMSException: Reconnecting to ssl://11.11.11.11:5071, attempt 1 out of 100
    at com.tibco.tibjms.TibjmsConnection._invokeOnExceptionCallback(TibjmsConnection.java:2132)
    at com.tibco.tibjms.TibjmsConnection._reconnect(TibjmsConnection.java:1975)
    at com.tibco.tibjms.TibjmsConnection$ServerLinkEventHandler.onEventReconnect(TibjmsConnection.java:387)
    at com.tibco.tibjms.TibjmsxLinkTcp._doReconnect(TibjmsxLinkTcp.java:598)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.work(TibjmsxLinkTcp.java:317)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.run(TibjmsxLinkTcp.java:259)
2017-10-13 15:42:32,335 [k Reader (Server-3285015)] ERROR com.example.jms.PaxJmsClient - Exception received from jms
javax.jms.JMSException: Reconnecting to ssl://10.10.10.10:5071, attempt 1 out of 100
    at com.tibco.tibjms.TibjmsConnection._invokeOnExceptionCallback(TibjmsConnection.java:2132)
    at com.tibco.tibjms.TibjmsConnection._reconnect(TibjmsConnection.java:1975)
    at com.tibco.tibjms.TibjmsConnection$ServerLinkEventHandler.onEventReconnect(TibjmsConnection.java:387)
    at com.tibco.tibjms.TibjmsxLinkTcp._doReconnect(TibjmsxLinkTcp.java:598)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.work(TibjmsxLinkTcp.java:317)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.run(TibjmsxLinkTcp.java:259)
2017-10-13 15:43:35,358 [k Reader (Server-3285015)] ERROR com.example.jms.PaxJmsClient - Exception received from jms
javax.jms.JMSException: Reconnecting to ssl://11.11.11.11:5071, attempt 2 out of 100
    at com.tibco.tibjms.TibjmsConnection._invokeOnExceptionCallback(TibjmsConnection.java:2132)
    at com.tibco.tibjms.TibjmsConnection._reconnect(TibjmsConnection.java:1975)
    at com.tibco.tibjms.TibjmsConnection$ServerLinkEventHandler.onEventReconnect(TibjmsConnection.java:387)
    at com.tibco.tibjms.TibjmsxLinkTcp._doReconnect(TibjmsxLinkTcp.java:598)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.work(TibjmsxLinkTcp.java:317)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.run(TibjmsxLinkTcp.java:259)
2017-10-13 15:43:38,359 [k Reader (Server-3285015)] ERROR com.example.jms.PaxJmsClient - Exception received from jms
javax.jms.JMSException: Reconnecting to ssl://10.10.10.10:5071, attempt 2 out of 100
    at com.tibco.tibjms.TibjmsConnection._invokeOnExceptionCallback(TibjmsConnection.java:2132)
    at com.tibco.tibjms.TibjmsConnection._reconnect(TibjmsConnection.java:1975)
    at com.tibco.tibjms.TibjmsConnection$ServerLinkEventHandler.onEventReconnect(TibjmsConnection.java:387)
    at com.tibco.tibjms.TibjmsxLinkTcp._doReconnect(TibjmsxLinkTcp.java:598)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.work(TibjmsxLinkTcp.java:317)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.run(TibjmsxLinkTcp.java:259)
2017-10-13 15:44:41,368 [k Reader (Server-3285015)] ERROR com.example.jms.PaxJmsClient - Exception received from jms
javax.jms.JMSException: Reconnecting to ssl://11.11.11.11:5071, attempt 3 out of 100
    at com.tibco.tibjms.TibjmsConnection._invokeOnExceptionCallback(TibjmsConnection.java:2132)
    at com.tibco.tibjms.TibjmsConnection._reconnect(TibjmsConnection.java:1975)
    at com.tibco.tibjms.TibjmsConnection$ServerLinkEventHandler.onEventReconnect(TibjmsConnection.java:387)
    at com.tibco.tibjms.TibjmsxLinkTcp._doReconnect(TibjmsxLinkTcp.java:598)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.work(TibjmsxLinkTcp.java:317)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.run(TibjmsxLinkTcp.java:259)
2017-10-13 15:44:45,951 [k Reader (Server-3285015)] ERROR com.example.jms.PaxJmsClient - Exception received from jms
javax.jms.JMSException: Reconnecting to ssl://10.10.10.10:5071, attempt 3 out of 100
    at com.tibco.tibjms.TibjmsConnection._invokeOnExceptionCallback(TibjmsConnection.java:2132)
    at com.tibco.tibjms.TibjmsConnection._reconnect(TibjmsConnection.java:1975)
    at com.tibco.tibjms.TibjmsConnection$ServerLinkEventHandler.onEventReconnect(TibjmsConnection.java:387)
    at com.tibco.tibjms.TibjmsxLinkTcp._doReconnect(TibjmsxLinkTcp.java:598)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.work(TibjmsxLinkTcp.java:317)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.run(TibjmsxLinkTcp.java:259)
2017-10-13 15:44:50,525 [k Reader (Server-3285015)] ERROR com.example.jms.PaxJmsClient - Exception received from jms
javax.jms.JMSException: Connection unknown by server
    at com.tibco.tibjms.Tibjmsx.buildException(Tibjmsx.java:659)
    at com.tibco.tibjms.TibjmsConnection._invokeOnExceptionCallback(TibjmsConnection.java:2114)
    at com.tibco.tibjms.TibjmsConnection._onDisconnected(TibjmsConnection.java:2487)
    at com.tibco.tibjms.TibjmsConnection$ServerLinkEventHandler.onEventDisconnected(TibjmsConnection.java:367)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.work(TibjmsxLinkTcp.java:328)
    at com.tibco.tibjms.TibjmsxLinkTcp$LinkReader.run(TibjmsxLinkTcp.java:259)
Run Code Online (Sandbox Code Playgroud)

我的代码 -

    @PostConstruct
    public void configurePaxJmsClient() {

        try {
            // create Topic Connection Factory
            TibjmsTopicConnectionFactory cf = new TibjmsTopicConnectionFactory(serverUrl);
            cf.setSSLTrustedCertificate(sslCertificatePath);
            cf.setSSLEnableVerifyHostName(false);
            cf.setUserName(username);
            cf.setUserPassword(password);

            cf.setReconnAttemptCount(100);
            cf.setReconnAttemptDelay(60000);
            cf.setReconnAttemptTimeout(10000);

            cf.setConnAttemptCount(100);
            cf.setConnAttemptDelay(60000);
            cf.setConnAttemptTimeout(10000);

            Tibjms.setExceptionOnFTEvents(true);
            Tibjms.setExceptionOnFTSwitch(true);

            // creation the connection and install an exception handler
            connection = cf.createTopicConnection(username, password);
            connection.setExceptionListener(this);

            // You might also use CLIENT_ACKNOWLEDGE here
            session = connection.createTopicSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
            Topic topic = session.createTopic(topicName);

            // Create the subscriber and install the listener
            TopicSubscriber ts;
            /*if (dsName == null || dsName.length() == 0) {
                ts = session.createSubscriber(topic);
            } else {
                ts = session.createDurableSubscriber(topic, dsName);
            }*/

            if (dsName == null || dsName.length() == 0) {
                ts = session.createSubscriber(topic, messageSelector, false);
            } else {
                ts = session.createDurableSubscriber(topic, dsName, messageSelector, false);
            }

            //
            ts.setMessageListener(this);
            connection.start();

        } catch (JMSException e) {
            LOGGER.error("Failed to connect with message:" + e.getMessage(), e);
            releaseResources();
        }
    }

    @Override
    public void onException(JMSException e) {
        LOGGER.error("Exception received from jms", e);
    }
Run Code Online (Sandbox Code Playgroud)

你们能告诉我这里有什么问题或者指出我正确的方向吗?

另外,在 spring bean 的 @PostConstruct 中进行 jms 连接初始化可以吗?

小智 5

为什么 EMS 会报告 \xe2\x80\x9creconnect failed: connectionunknown for id=xxxxx\xe2\x80\x9d?\n此消息表明当客户端尝试重新连接时,EMS 服务器没有或不再有客户端连接信息。

\n\n

可能的原因有两个:

\n\n
    \n
  1. 参数 \xe2\x80\x9cft_reconnect_timeout\xe2\x80\x9d 不够高。在客户端重新连接服务器之前,连接已被服务器清除。\n可以通过在 tibemsd.conf 中为 \xe2\x80\x9cft_reconnect_timeout\xe2\x80\x9d 参数设置更高的值来解决此问题。默认值为 60 秒。

  2. \n
  3. 参数 \xe2\x80\x9cft_reconnect_timeout\xe2\x80\x9d 是备份服务器等待客户端重新连接的时间(以秒为单位)\n(在故障转移情况下承担主服务器角色之后),此参数指定服务器将保持挂起连接的时间(以秒为单位)。\n如果客户端在此时间段内未重新连接,服务器将从共享状态文件中删除其状态。\n如果客户端在\xe2\x80\x9cft_reconnect_timeout\xe2\x80\x9d中设置的时间之后尝试重新连接,则服务器没有客户端连接信息并打印“重新连接失败:连接未知”消息。

  4. \n
\n\n

所以会建议你根据你的环境设置该值并进行测试。另外\n如果Ft_reconnect_timeout值很高,大量连接和连接相关对象在内存中保留很长时间,你可能会遇到内存问题。如果连接使用clientID,您可能会遇到\xe2\x80\x9cclientID已经存在\xe2\x80\x9d问题。

\n