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&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.
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.
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.