2017-10-13 3 views
0

Ich verwende Tibjms Glas für JMS-Verbindung und es funktioniert gut im Normalfall, aber ich habe ein Problem, falls die Verbindung zu JMS-Provider verloren ist und dann kommt es zurück. Um das Problem zu reproduzieren, führte ich die folgenden Schritte aus:Tibjms javax.jms.JMSException: Verbindung unbekannt vom Server

  1. Verbinden Sie sich mit Intranet und starten Sie den Server. Funktioniert gut.

  2. Vom Intranet trennen. Es versucht, den Server neu zu verbinden. Fein.

  3. Verbinden Sie sich erneut mit dem Intranet. Es löst eine unbekannte Ausnahme aus und verbindet sich nie wieder. Problem.

Also, mein Problem ist, „javax.jms.JMSException: Verbindung unbekannt durch Server“, die mir nicht viel sagen, und man kann es am Ende der Protokolle sehen.

Sie können aus den folgenden Protokolle sehen -

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) 

Mein Code -

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

Könnt ihr mir sagen, was das Problem hier ist, oder mich in die richtige Richtung?

Ist es auch in Ordnung, jms Verbindungsinitialisierung in @PostConstruct einer Frühlingsbohne zu haben?

+0

Haben Sie immer noch dieses Problem? – Losusovic

+0

Ja .. Haben Sie eine Lösung dafür oder haben Sie das gleiche Problem? –

Antwort

3

Warum EMS meldet "Wiederverbindung fehlgeschlagen: Verbindung unbekannt für ID = xxxxx"? Diese Nachricht gibt an, dass der EMS-Server nicht über die Clientverbindungsinformationen verfügt oder nicht mehr verfügt, wenn der Client versucht, die Verbindung erneut herzustellen.

Es gibt zwei mögliche Gründe:

  1. Parameter „ft_reconnect_timeout“ ist nicht hoch genug. Bevor der Client den Server erneut verbindet, wurde die Verbindung bereits vom Server gelöscht. Dies könnte gelöst werden, indem ein höherer Wert für den Parameter "ft_reconnect_timeout" in tibemsd.conf festgelegt wird. Der Standardwert ist 60 Sekunden.

  2. Parameter „ft_reconnect_timeout“ sind die Zeitmenge (in Sekunden), dass ein Backup-Server wartet Clients wieder zu verbinden (nachdem es die Rolle des primären Servers in einer Failover-Situation annimmt), wird dieser Parameter in Sekunden angibt, wie lange Der Server hält ausstehende Verbindungen aufrecht. Wenn ein Client innerhalb dieses Zeitraums keine Verbindung herstellt, entfernt der Server seinen Status aus den freigegebenen Statusdateien. Und wenn der Client versucht, die Verbindung nach der in "ft_reconnect_timeout" festgelegten Zeit wiederherzustellen, verfügt der Server nicht über die Clientverbindungsinformationen und gibt die Nachricht "reconnect failed: connection unbekannt" aus.

So wird vorschlagen, dass Sie den Wert einzustellen entsprechend Ihrer Umgebung und testen Sie die same.Also Wenn Ft_reconnect_timeout Wert hoch ist, werden viele Verbindungen und Verbindungs ​​verwandte Objekte im Speicher für eine lange Zeit gehalten, Möglicherweise haben Sie ein Speicherproblem. Und wenn die Verbindung clientID verwendet, können Sie das Problem "clientID ist bereits vorhanden" haben.

Verwandte Themen