Se reconnecter à ActiveMQ serveur après une défaillance du réseau

nous utilisons ActiveMQ 5.8.0 pour vous connecter à notre application Java via TCP à un autre système.
Demande/réponse (synchrone avec la réponse à la file d'attente temporaire) fonctionne très bien avec notre client et de sa partie correspondante.

Mais nous ne sommes pas sûr de savoir comment gérer les "anormaux" des situations, comme par exemple une courte panne de réseau.
Nous testons si l'application peut continuer à fonctionner normalement après la prise du reconnecter.

Mais jusqu'à présent, nous ne pouvions pas gérer ça parce que le client ne semble pas se reconnecter automatiquement à la courtier comme prévu.
Nous avons pensé à implenting par nous-mêmes à l'intérieur d'un propre TransportListener, mais ce n'est pas recommandé (voir Le Transport de l'Auditeur et la ActiveMq redémarrer, où ActiveMQ membre Tim Bish conseils pour utiliser le protocole de basculement).
Mais le basculement parvient tout juste à passer à un autre courtier, si l'on est en bas, à droite?

Actuellement, nous sommes à l'aide de la TransportListener seulement à surveiller l'état de la connexion dans le fichier journal, ce qui mène à des entrées de journal comme suivant ou similaire (publié dans le journal à long ci-dessous).

ActiveMQ Connexion Exécuteur testamentaire: ... Producteur reçues: java.net.Exception socketexception: ...

class ConnectionStateMonitor
    implements TransportListener
{
    @Override
    public void onCommand(Object command)
    {
        logInfo("Producer received: " + command);
    }

    @Override
    public void onException(IOException exception)
    {
        logError("Producer received: " + exception);
    }

    @Override
    public void transportInterupted()
    {
        logError("Producer received transport interuption.");
    }

    @Override
    public void transportResumed()
    {
        logInfo("Producer received transport resumption.");
    }
}

Désolé, pour l'affichage d'un journal à long extrait avec stacktraces ci-dessous, mais peut-être quelqu'un voit tout de suite ce qu'il manque.

Nous sommes actuellement en train de travailler avec les paramètres suivants:

  • wireFormat.maxInactivityDuration=20000
  • max le temps d'attente pour une réponse: 10000 ms

Toute idées sur la façon de résoudre ce problème (et comment format assez le journal ci-dessous) ?

Merci d'avance!

2013-06-05 14:09:21,676|main |Signal |DEBUG|Attendre 60000
2013-06-05 14:09:30,279|ActiveMQ InactivityMonitor
WriteCheckTimer|AbstractInactivityMonitor|DEBUG|WriteChecker 6666 ms
écoulé depuis la dernière écriture de la vérifier.
2013-06-05 14:09:30,282|ActiveMQ
InactivityMonitor Travailleur|AbstractInactivityMonitor|DEBUG|en cours d'Exécution
WriteCheck[tcp://192.168.1.29:61616]
2013-06-05 14:09:36,945|ActiveMQ
InactivityMonitor
WriteCheckTimer|AbstractInactivityMonitor|DEBUG|WriteChecker 6666 ms
écoulé depuis la dernière écriture de la vérifier.
2013-06-05 14:09:36,945|ActiveMQ
InactivityMonitor Travailleur|AbstractInactivityMonitor|DEBUG|en cours d'Exécution
WriteCheck[tcp://192.168.1.29:61616] 2013-06-05 14:09:40,579|ActiveMQ
Transport:
tcp://test-server/192.168.1.29:61616@54127/ThreadPoolUtils/DEBUG/Shutdown
de ExecutorService: java.util.concurrent.ThreadPoolExecutor@13e0aba est
arrêt: la vraie et de la fin: faux a: 0.000 secondes. Causés par:
javax.jms.JMSException: la réinitialisation de la Connexion à
org.apache.activemq.util.JMSExceptionSupport.créer(JMSExceptionSupport.java:49)
au
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391)
au
org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1912)
au
org.apache.activemq.ActiveMQMessageProducer.(ActiveMQMessageProducer.java:125)
au
org.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:956)
au
de.wer.services.activemq.ActiveMqConnectionImpl.sendRequest(ActiveMqConnectionImpl.java:218)
... 4 plus 2013-06-05 14:09:40,579|ActiveMQ de Transport:
tcp://test-server/192.168.1.29:61616@54127/ActiveMQConnection/DEBUG/Async
exception, sans exception, listener: java.net.Exception socketexception:
La réinitialisation de la connexion java.net.Exception socketexception: la réinitialisation de la Connexion à
java.net.SocketInputStream.lire(Source Inconnue)
org.apache.activemq.de transport.tcp.TcpBufferedInputStream.de remplissage(TcpBufferedInputStream.java:50)
au
org.apache.activemq.de transport.tcp.TcpTransport$2.de remplissage(TcpTransport.java:604)
au
org.apache.activemq.de transport.tcp.TcpBufferedInputStream.lire(TcpBufferedInputStream.java:58)
au
org.apache.activemq.de transport.tcp.TcpTransport$2.lire(TcpTransport.java:589)
à java.io.DataInputStream.readInt(Source Inconnue)
org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)
au
org.apache.activemq.de transport.tcp.TcpTransport.readCommand(TcpTransport.java:221)
au
org.apache.activemq.de transport.tcp.TcpTransport.doRun(TcpTransport.java:213)
au
org.apache.activemq.de transport.tcp.TcpTransport.exécuter(TcpTransport.java:196)
à java.lang.Fil de discussion.run(Unknown Source) Causés par:
java.net.Exception socketexception: la réinitialisation de la Connexion à
java.net.SocketInputStream.lire(Source Inconnue)
org.apache.activemq.de transport.tcp.TcpBufferedInputStream.de remplissage(TcpBufferedInputStream.java:50)
au
org.apache.activemq.de transport.tcp.TcpTransport$2.de remplissage(TcpTransport.java:604)
au
org.apache.activemq.de transport.tcp.TcpBufferedInputStream.lire(TcpBufferedInputStream.java:58)
au
org.apache.activemq.de transport.tcp.TcpTransport$2.lire(TcpTransport.java:589)
à java.io.DataInputStream.readInt(Source Inconnue)
org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)
au
org.apache.activemq.de transport.tcp.TcpTransport.readCommand(TcpTransport.java:221)
au
org.apache.activemq.de transport.tcp.TcpTransport.doRun(TcpTransport.java:213)
au
org.apache.activemq.de transport.tcp.TcpTransport.exécuter(TcpTransport.java:196)
... 1 de plus
2013-06-05 14:09:40,583|ActiveMQ Connexion Exécuteur Testamentaire:
tcp://test-server/192.168.1.29:61616@54127/TcpTransport/DEBUG/Stopping
transport tcp://test-server/192.168.1.29:61616@54127 2013-06-05
14:09:40,583|ActiveMQ Connexion Exécuteur Testamentaire:
tcp://test-server/192.168.1.29:61616@54127/TaskRunnerFactory/DEBUG/Initialized
TaskRunnerFactory[ActiveMQ Tâche] à l'aide de ExecutorService:
java.util.concurrent.ThreadPoolExecutor@186f247
2013-06-05 14:09:40,584|ActiveMQ Tâche-1 |TcpTransport|DEBUG|socket Fermée
Socket[addr=test-serveur/192.168.1.29,port=61616,localport=54127]
Causés par: javax.jms.JMSException: la réinitialisation de la Connexion à
org.apache.activemq.util.JMSExceptionSupport.créer(JMSExceptionSupport.java:49)
au
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391)
au
org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1912)
au
org.apache.activemq.ActiveMQMessageProducer.<init>(ActiveMQMessageProducer.java:125)
au
org.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:956)
au
de.wer.services.activemq.ActiveMqConnectionImpl.sendRequest(ActiveMqConnectionImpl.java:218)
... 4 plus Causée par: java.net.Exception socketexception: la réinitialisation de la Connexion à
java.net.SocketInputStream.lire(Source Inconnue)
org.apache.activemq.de transport.tcp.TcpBufferedInputStream.de remplissage(TcpBufferedInputStream.java:50)
au
org.apache.activemq.de transport.tcp.TcpTransport$2.de remplissage(TcpTransport.java:604)
au
org.apache.activemq.de transport.tcp.TcpBufferedInputStream.lire(TcpBufferedInputStream.java:58)
au
org.apache.activemq.de transport.tcp.TcpTransport$2.lire(TcpTransport.java:589)
à java.io.DataInputStream.readInt(Source Inconnue)
org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)
au
org.apache.activemq.de transport.tcp.TcpTransport.readCommand(TcpTransport.java:221)
au
org.apache.activemq.de transport.tcp.TcpTransport.doRun(TcpTransport.java:213)
au
org.apache.activemq.de transport.tcp.TcpTransport.exécuter(TcpTransport.java:196)
... 1 de plus 2013-06-05 14:09:40,584|ActiveMQ Connexion Exécuteur testamentaire:
tcp://test-server/192.168.1.29:61616@54127/ThreadPoolUtils/DEBUG/Forcing
l'arrêt de ExecutorService:
java.util.concurrent.ThreadPoolExecutor@186f247 Causés par:
javax.jms.JMSException: la réinitialisation de la Connexion à
org.apache.activemq.util.JMSExceptionSupport.créer(JMSExceptionSupport.java:49)
au
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1391)
au
org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1912)
au
org.apache.activemq.ActiveMQMessageProducer.(ActiveMQMessageProducer.java:125)
au
org.apache.activemq.ActiveMQSession.createProducer(ActiveMQSession.java:956)
au
de.wer.services.activemq.ActiveMqConnectionImpl.sendRequest(ActiveMqConnectionImpl.java:218)
... 4 plus Causée par: java.net.Exception socketexception: la réinitialisation de la Connexion à
java.net.SocketInputStream.lire(Source Inconnue)
org.apache.activemq.de transport.tcp.TcpBufferedInputStream.de remplissage(TcpBufferedInputStream.java:50)
au
org.apache.activemq.de transport.tcp.TcpTransport$2.de remplissage(TcpTransport.java:604)
au
org.apache.activemq.de transport.tcp.TcpBufferedInputStream.lire(TcpBufferedInputStream.java:58)
au
org.apache.activemq.de transport.tcp.TcpTransport$2.lire(TcpTransport.java:589)
à java.io.DataInputStream.readInt(Source Inconnue)
org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275)
au
org.apache.activemq.de transport.tcp.TcpTransport.readCommand(TcpTransport.java:221)
au
org.apache.activemq.de transport.tcp.TcpTransport.doRun(TcpTransport.java:213)
au
org.apache.activemq.de transport.tcp.TcpTransport.exécuter(TcpTransport.java:196)
... 1 de plus 2013-06-05 14:09:40,587|ActiveMQ Connexion Exécuteur testamentaire:
tcp://test-server/192.168.1.29:61616@54127/ActiveMqConnectionImpl/ERROR/Producer reçu: java.net.Exception socketexception: Connection reset

OriginalL'auteur Mayoares | 2013-06-05