web-dev-qa-db-fra.com

AVERTISSEMENT en tant que Java.io.EOFException au démarrage d'ActiveMQ

j'essaie de démarrer ActiveMQ 5.11 et je vois un WARNING comme ci-dessous:

 WARN | Transport Connection to: tcp://127.0.0.1:40890 failed: Java.io.EOFException

Ma activemq.xml est comme ci-dessous:

<transportConnectors>
    <transportConnector name="openwire" uri="tcp://0.0.0.0:${JMS_PORT}" />
    <transportConnector name="stomp" uri="stomp://0.0.0.0:${JMS_STOMP_PORT}"/>
    <transportConnector name="ssl" uri="ssl://0.0.0.0:${JMS_SSL_PORT}"/>
</transportConnectors>

<sslContext>
    <sslContext
        keyStore="file:${JMS_KEY_STORE}"
        keyStorePassword="${JMS_KEY_STORE_PASSWORD}"
        trustStore="file:${JMS_TRUST_STORE}"
        trustStorePassword="${JMS_TRUST_STORE_PASSWORD}"
    />
</sslContext>

<networkConnectors>
    <networkConnector 
        name="Host1 and Host2" 
        uri="static://(${JMS_X_SITE_CSV_URL})?wireFormat=ssl&amp;wireFormat.maxInactivityDuration=30000"
        dynamicOnly="true"
        suppressDuplicateQueueSubscriptions = "true"
        networkTTL="1"
    />
</networkConnectors>

Voici le journal complet de la console pour cela.

Java Runtime: Oracle Corporation 1.7.0_05 /usr/Java/jdk1.7.0_05/jre
  Heap sizes: current=1004928k  free=994439k  max=1004928k
    JVM args: -Xmx1G -Dorg.Apache.activemq.UseDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=/home/dragon/activemq/conf/login.config -Dcom.Sun.management.jmxremote -Djava.io.tmpdir=/home/dragon/activemq/tmp -Dactivemq.classpath=/home/dragon/activemq/conf; -Dactivemq.home=/home/dragon/activemq -Dactivemq.base=/home/dragon/activemq -Dactivemq.conf=/home/dragon/activemq/conf -Dactivemq.data=/home/dragon/activemq/data
Extensions classpath:
  [/home/dragon/activemq/lib,/home/dragon/activemq/lib/camel,/home/dragon/activemq/lib/optional,/home/dragon/activemq/lib/web,/home/dragon/activemq/lib/extra]
ACTIVEMQ_HOME: /home/dragon/activemq
ACTIVEMQ_BASE: /home/dragon/activemq
ACTIVEMQ_CONF: /home/dragon/activemq/conf
ACTIVEMQ_DATA: /home/dragon/activemq/data
Loading message broker from: xbean:activemq.xml
 INFO | Refreshing org.Apache.activemq.xbean.XBeanBrokerFactory$1@a842913: startup date [Fri Oct 07 08:14:02 IST 2016]; root of context hierarchy
 INFO | PListStore:[/home/dragon/activemq/data/divinedragonbox/tmp_storage] started
 INFO | Using Persistence Adapter: KahaDBPersistenceAdapter[/home/dragon/jms_store]
 INFO | JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:15526/jmxrmi
 INFO | KahaDB is version 5
 INFO | Recovering from the journal ...
 INFO | Recovery replayed 76 operations from the journal in 0.032 seconds.
 INFO | Apache ActiveMQ 5.11.1 (divinedragonbox, ID:divinedragonbox-60914-1475824445361-0:1) is starting
 INFO | Listening for connections at: tcp://divinedragonbox:15511
 INFO | Connector openwire started
 INFO | Listening for connections at: stomp://divinedragonbox:15512
 INFO | Connector stomp started
 INFO | Listening for connections at: ssl://divinedragonbox:15571
 INFO | Connector ssl started
 INFO | Establishing network connection from vm://divinedragonbox?async=false&network=true to ssl://localhost:15571
 INFO | Connector vm://divinedragonbox started
 INFO | Network Connector DiscoveryNetworkConnector:Host1 and Host2:BrokerService[divinedragonbox] started
 INFO | Apache ActiveMQ 5.11.1 (divinedragonbox, ID:divinedragonbox-60914-1475824445361-0:1) started
 INFO | For help or more information please see: http://activemq.Apache.org
 INFO | divinedragonbox Shutting down
 INFO | Connector vm://divinedragonbox stopped
 INFO | divinedragonbox bridge to Unknown stopped
 WARN | Transport Connection to: tcp://127.0.0.1:40890 failed: Java.io.EOFException
 INFO | ActiveMQ WebConsole available at http://localhost:15521/
 INFO | Initializing Spring FrameworkServlet 'dispatcher'
 INFO | jolokia-agent: No access restrictor found at classpath:/jolokia-access.xml, access to all MBeans is allowed

J'ai activé le TRACE pour les messages et j'ai obtenu les extraits d'exceptions suivants dans le fichier journal.

2016-10-07 08:15:45,378 | TRACE | Execute[ActiveMQ ForwardingBridge StopTask] runnable: org.Apache.activemq.network.DemandForwardingBridgeSupport$4@b3f451d | org.Apache.activemq.thread.TaskRunnerFactory | ActiveMQ BrokerService[divinedragonbox] Task-4
2016-10-07 08:15:45,378 | TRACE | Created and running thread[ActiveMQ ForwardingBridge StopTask-5]: Thread[ActiveMQ ForwardingBridge StopTask-5,5,main] | org.Apache.activemq.thread.TaskRunnerFactory | ActiveMQ BrokerService[divinedragonbox] Task-4
2016-10-07 08:15:45,379 | DEBUG | Caught exception sending shutdown | org.Apache.activemq.network.DemandForwardingBridgeSupport | ActiveMQ ForwardingBridge StopTask-5
org.Apache.activemq.transport.TransportDisposedIOException: Transport disposed.
    at org.Apache.activemq.transport.vm.VMTransport.oneway(VMTransport.Java:82)[activemq-broker-5.11.1.jar:5.11.1]
    at org.Apache.activemq.transport.MutexTransport.oneway(MutexTransport.Java:68)[activemq-client-5.11.1.jar:5.11.1]
    at org.Apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.Java:60)[activemq-client-5.11.1.jar:5.11.1]
    at org.Apache.activemq.network.DemandForwardingBridgeSupport$4.run(DemandForwardingBridgeSupport.Java:288)[activemq-broker-5.11.1.jar:5.11.1]
    at Java.lang.Thread.run(Thread.Java:722)[:1.7.0_05]
2016-10-07 08:15:45,380 | DEBUG | Stopping transport ssl://localhost/127.0.0.1:15571 | org.Apache.activemq.transport.tcp.TcpTransport | ActiveMQ BrokerService[divinedragonbox] Task-4
2016-10-07 08:15:45,381 | DEBUG | Initialized TaskRunnerFactory[ActiveMQ Task] using ExecutorService: null | org.Apache.activemq.thread.TaskRunnerFactory | ActiveMQ BrokerService[divinedragonbox] Task-4
2016-10-07 08:15:45,381 | TRACE | Execute[ActiveMQ Task] runnable: org.Apache.activemq.transport.tcp.TcpTransport$1@a1848dc | org.Apache.activemq.thread.TaskRunnerFactory | ActiveMQ BrokerService[divinedragonbox] Task-4
2016-10-07 08:15:45,381 | TRACE | Created and running thread[ActiveMQ Task-1]: Thread[ActiveMQ Task-1,5,main] | org.Apache.activemq.thread.TaskRunnerFactory | ActiveMQ BrokerService[divinedragonbox] Task-4
2016-10-07 08:15:45,382 | TRACE | Closing socket 2a9a5d77[TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: Socket[addr=localhost/127.0.0.1,port=15571,localport=40999]] | org.Apache.activemq.transport.tcp.TcpTransport | ActiveMQ Task-1
2016-10-07 08:15:45,383 | DEBUG | Closed socket 2a9a5d77[TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: Socket[addr=localhost/127.0.0.1,port=15571,localport=40999]] | org.Apache.activemq.transport.tcp.TcpTransport | ActiveMQ Task-1
2016-10-07 08:15:45,384 | INFO  | divinedragonbox bridge to Unknown stopped | org.Apache.activemq.network.DemandForwardingBridgeSupport | ActiveMQ BrokerService[divinedragonbox] Task-4
2016-10-07 08:15:45,384 | TRACE | serviceLocalException: disposed true ex | org.Apache.activemq.network.DemandForwardingBridgeSupport | ActiveMQ BrokerService[divinedragonbox] Task-4
org.Apache.activemq.transport.TransportDisposedIOException: peer (vm://divinedragonbox#1) stopped.
    at org.Apache.activemq.transport.vm.VMTransport.stop(VMTransport.Java:207)[activemq-broker-5.11.1.jar:5.11.1]
    at org.Apache.activemq.transport.TransportFilter.stop(TransportFilter.Java:65)[activemq-client-5.11.1.jar:5.11.1]
    at org.Apache.activemq.transport.TransportFilter.stop(TransportFilter.Java:65)[activemq-client-5.11.1.jar:5.11.1]
    at org.Apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.Java:132)[activemq-client-5.11.1.jar:5.11.1]
    at org.Apache.activemq.broker.TransportConnection.doStop(TransportConnection.Java:1151)[activemq-broker-5.11.1.jar:5.11.1]
    at org.Apache.activemq.broker.TransportConnection$4.run(TransportConnection.Java:1117)[activemq-broker-5.11.1.jar:5.11.1]
    at Java.lang.Thread.run(Thread.Java:722)[:1.7.0_05]
2016-10-07 08:15:45,384 | DEBUG | Stopped transport: vm://divinedragonbox#0 | org.Apache.activemq.broker.TransportConnection | ActiveMQ BrokerService[divinedragonbox] Task-4
2016-10-07 08:15:45,384 | TRACE | Shutdown timeout: 1 task: Transport Connection to: vm://divinedragonbox#0 | org.Apache.activemq.thread.DedicatedTaskRunner | ActiveMQ BrokerService[divinedragonbox] Task-4
2016-10-07 08:15:45,385 | TRACE | Run task done: Transport Connection to: vm://divinedragonbox#0 | org.Apache.activemq.thread.DedicatedTaskRunner | ActiveMQ Connection Dispatcher: vm://divinedragonbox#0
2016-10-07 08:15:45,385 | DEBUG | Connection Stopped: vm://divinedragonbox#0 | org.Apache.activemq.broker.TransportConnection | ActiveMQ BrokerService[divinedragonbox] Task-4
2016-10-07 08:15:45,385 | TRACE | Shutdown of ExecutorService: Java.util.concurrent.ThreadPoolExecutor@dfe196a[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0] with await termination: 0 millis | org.Apache.activemq.util.ThreadPoolUtils | ActiveMQ Transport: ssl:///127.0.0.1:40999
2016-10-07 08:15:45,385 | DEBUG | Shutting down VM connectors for broker: divinedragonbox | org.Apache.activemq.transport.vm.VMTransportFactory | triggerStartAsyncNetworkBridgeCreation: remoteBroker=ssl://localhost/127.0.0.1:15571, localBroker= vm://divinedragonbox#0
2016-10-07 08:15:45,385 | INFO  | Connector vm://divinedragonbox stopped | org.Apache.activemq.broker.TransportConnector | triggerStartAsyncNetworkBridgeCreation: remoteBroker=ssl://localhost/127.0.0.1:15571, localBroker= vm://divinedragonbox#0
2016-10-07 08:15:45,400 | DEBUG | Shutdown of ExecutorService: Java.util.concurrent.ThreadPoolExecutor@dfe196a[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0] is shutdown: true and terminated: true took: 0.001 seconds. | org.Apache.activemq.util.ThreadPoolUtils | ActiveMQ Transport: ssl:///127.0.0.1:40999
2016-10-07 08:15:45,400 | DEBUG | Transport Connection to: tcp://127.0.0.1:40999 failed: Java.io.EOFException | org.Apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: ssl:///127.0.0.1:40999
Java.io.EOFException
    at Java.io.DataInputStream.readInt(DataInputStream.Java:392)[:1.7.0_05]
    at org.Apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.Java:258)[activemq-client-5.11.1.jar:5.11.1]
    at org.Apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.Java:221)[activemq-client-5.11.1.jar:5.11.1]
    at org.Apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.Java:213)[activemq-client-5.11.1.jar:5.11.1]
    at org.Apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.Java:196)[activemq-client-5.11.1.jar:5.11.1]
    at Java.lang.Thread.run(Thread.Java:722)[:1.7.0_05]
2016-10-07 08:15:45,401 | DEBUG | Unregistering MBean org.Apache.activemq:type=Broker,brokerName=divinedragonbox,connector=clientConnectors,connectorName=ssl,connectionViewType=remoteAddress,connectionName=tcp_//127.0.0.1_40999 | org.Apache.activemq.broker.jmx.ManagementContext | ActiveMQ Transport: ssl:///127.0.0.1:40999
2016-10-07 08:15:45,401 | TRACE | Execute[ActiveMQ BrokerService[divinedragonbox] Task] runnable: org.Apache.activemq.broker.TransportConnection$4@5039f4d3 | org.Apache.activemq.thread.TaskRunnerFactory | ActiveMQ Transport: ssl:///127.0.0.1:40999
2016-10-07 08:15:45,401 | TRACE | Created and running thread[ActiveMQ BrokerService[divinedragonbox] Task-6]: Thread[ActiveMQ BrokerService[divinedragonbox] Task-6,8,main] | org.Apache.activemq.thread.TaskRunnerFactory | ActiveMQ Transport: ssl:///127.0.0.1:40999

Quelqu'un peut-il me dire pourquoi ces exceptions sont levées?

Je peux fournir l'intégralité du fichier journal si quelqu'un a besoin d'un examen plus approfondi.

11
divinedragon

Donc, je suis finalement arrivé à la cause profonde de cela. Ce WARNING vient parce que la façon dont networkConnector fonctionne et est configurée. J'avais posté ceci sur la communauté activemq ici - http://activemq.2283324.n4.nabble.com/Java-io-EOFException-when-ActiveMQ-starts-td4717598.html

Lorsque networkConnector est utilisé, activemq essaie de se connecter au courtier configuré. Dans mon cas, j'essayais de me connecter au courtier et c'est pourquoi il rejetait la connexion. La même chose a été signalée par Tim dans la communauté.

Je n'ai jamais essayé de configurer un courtier avec un connecteur réseau statique connecté à lui-même (pourquoi le ferais-je, c'est une configuration inutile), mais cela ne m'étonnerait pas si le courtier rejetait cette auto-connexion, ce qui pourrait entraîner l'exception EOF que vous avez vue . Il est également possible qu'il y ait un problème avec votre configuration SSL, comme vous l'avez suggéré; il n'y a aucun bon moyen dans une discussion de liste de diffusion pour vérifier si votre magasin de confiance fait confiance à votre magasin de clés et les certificats sont présentés correctement car il s'agit uniquement du contenu binaire et vous ne devriez pas le partager publiquement, mais vous pouvez tester la configuration SSL en définissant deux courtiers (dans un environnement de test) qui ont chacun leur JMS_X_SITE_CSV_URL pointés l'un sur l'autre. Si cette configuration vous donne des EOFExceptions, passez à l'utilisation du transport tcp et voyez ce qui se passe. Si vous obtenez des erreurs avec le transport SSL mais pas celui TCP, il y a de fortes chances que quelque chose ne va pas avec vos clés.

En ce qui concerne la configuration actuelle (où vous avez un courtier dont le seul networkConnection est un statique: ssl: one pour lui-même), ce n'est pas une configuration utile (avoir un networkConnector pour vous ne sert à rien), et vous l'avez prouvé au début de cette discussion que sa suppression supprime la ligne de journal WARN qui vous inquiète. Je ne suis donc pas d'accord avec votre affirmation selon laquelle "je pense que la configuration semble toujours correcte". Soit basculez vers quelque chose qui sert le but que vous avez dit que vous essayez d'atteindre (comme la découverte: transport au lieu de statique: transport, ou aimez lister vos serveurs intersites si vous continuez à utiliser le statique: transport) ou retirez-le et supprimez la ligne WARN.

Ainsi, networkConnector est essentiellement inutile s'il s'agit d'un système de courtier unique. Cela a plus de sens dans les déploiements multi-courtiers, puis tous les courtiers sont configurés, sauf l'auto sur chaque courtier séparément.

Pour que la configuration networkConnector fonctionne toujours dans le déploiement d'un courtier unique, la valeur que je devais définir était - url="static://(ssl://divinedragonbox:7031)..." (nom d'hôte au lieu de l'adresse IP ou localhost). Cela supprime le WARNING qui vient.

7
divinedragon

Ces EOFExceptions indiquent qu'un client se connecte au courtier, puis se déconnecte sans fermer proprement la connexion. Les coupables typiques incluent les agents de surveillance tcp/ip et les clients mal codés.

4
Matt Pavlovich