2017-10-13 151 views
0

我正在使用Tibjms jar for JMS連接,它在正常情況下工作正常,但是在連接到jms提供程序的連接丟失並返回時出現問題。要重現此問題,我執行了以下步驟 -Tibjms javax.jms.JMSException:服務器連接未知

  1. 連接到Intranet並啓動服務器。工作正常。

  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) 

我的代碼 -

@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); 
    } 

你們能告訴我這裏有什麼問題或點我在正確的方向?

此外,這是好的jms連接初始化在spring bean的@PostConstruct?

+0

你還有這個問題嗎? – Losusovic

+0

是的..你有解決方案嗎?或者你面臨同樣的問題? –

回答

3

爲什麼EMS報告「重新連接失敗:id = xxxxx的連接未知」? 此消息表示當客戶端嘗試重新連接時,EMS服務器不具有或不再具有客戶端連接信息。

有兩個可能的原因:

  1. 參數「ft_reconnect_timeout」不夠高。在客戶端重新連接服務器之前,連接已被服務器清除。 這可以通過在tibemsd.conf中爲「ft_reconnect_timeout」參數設置一個更高的值來解決。默認值是60秒。

  2. 參數「ft_reconnect_timeout」是的時候,備份服務器等待客戶端重新連接 (它假定在故障轉移情況主服務器的角色之後)在秒鐘有多長量(以秒爲單位),該參數指定服務器將保持掛起的連接。 如果客戶端在此時間段內沒有重新連接,服務器會從共享狀態文件中刪除其狀態。 如果客戶端在「ft_reconnect_timeout」中設置的時間後嘗試重新連接,服務器沒有客戶端連接信息並打印「重新連接失敗:連接未知」消息。

所以會建議您根據您的環境設置的值和測試same.Also 如果Ft_reconnect_timeout值高,很多連接和連接相關的對象都保存在內存很長一段時間,你可能有內存問題。如果連接使用的是clientID,則可能會遇到「clientID已存在」問題。