ActiveMQ 启动时警告为 java.io.EOFException
Posted
技术标签:
【中文标题】ActiveMQ 启动时警告为 java.io.EOFException【英文标题】:WARNING as java.io.EOFException when ActiveMQ starts 【发布时间】:2017-02-16 08:51:20 【问题描述】:我正在尝试启动 ActiveMQ 5.11,我看到 WARNING
如下:
WARN | Transport Connection to: tcp://127.0.0.1:40890 failed: java.io.EOFException
我的activemq.xml
如下:
<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>
这是整个控制台日志。
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
我为消息启用了 TRACE,并在日志文件中获得了以下异常的 sn-ps。
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
谁能告诉我为什么会抛出这些异常?
如果有人需要更深入的了解,我可以提供整个日志文件。
【问题讨论】:
【参考方案1】:所以,我终于找到了这个问题的根本原因。这个WARNING
的出现是因为networkConnector
的工作方式和配置方式。我在这里的 activemq 社区上发布了这个 - http://activemq.2283324.n4.nabble.com/java-io-EOFException-when-ActiveMQ-starts-td4717598.html
当使用networkConnector
时,activemq 会尝试连接到配置的代理。就我而言,我试图自行连接到代理,这就是它拒绝连接的原因。 Tim 在社区中也指出了这一点。
我从未尝试使用静态 networkConnector 配置代理 连接到自身(为什么我会,这是一个无用的配置),但是 如果经纪人拒绝了这种自我连接,我不会感到惊讶, 这可能会导致您看到的 EOFException。也是可以的 您的 SSL 配置有问题 建议;在邮件列表讨论中没有很好的方法来检查 您的信任库是否信任您的密钥库并且证书正在 正确呈现,因为这都是关于二进制内容的,你 不应该公开分享,但你可以测试 SSL 通过设置两个代理(在测试环境中)进行配置 每个都有自己的 JMS_X_SITE_CSV_URL 指向对方。如果说 配置给你EOFExceptions,然后切换到使用tcp 运输,看看会发生什么。如果您遇到 ssl 错误 运输,但不是 tcp 的,很有可能是某种东西 你的钥匙有问题。
就当前配置而言(您有一个代理,其 只有 networkConnection 是一个静态的:ssl:一个到它自己),它不是一个 有用的配置(给自己一个 networkConnector 没有用 目的),并且您在本次讨论的早期证明将其删除 删除您关心的 WARN 日志行。所以我不同意 用你的说法“我觉得配置看起来还不错”。 要么切换到符合您所说的目的的东西 试图实现(如发现:传输而不是 静态:传输,或者喜欢列出你的跨站点服务器,如果你是 将继续使用静态:运输)或将其取出并 删除 WARN 行。
因此,networkConnector
如果是单一代理系统,则基本上没有用处。在多代理部署中更有意义,然后配置所有代理,每个代理上的自我除外。
要使networkConnector
配置仍能在单代理部署中工作,我必须设置的值是-url="static://(ssl://divinedragonbox:7031)..."
(主机名而不是IP 地址或localhost
)。这样就摆脱了WARNING
。
【讨论】:
【参考方案2】:那些 EOFExceptions 表示客户端连接到代理,然后断开连接而没有完全关闭连接。典型的罪魁祸首包括 tcp/ip 监控代理和错误编码的客户端。
【讨论】:
但是,我没有运行任何客户端。我一启动 ActiveMQ 就会收到此警告消息。它内部是否有代理本身的客户?以上是关于ActiveMQ 启动时警告为 java.io.EOFException的主要内容,如果未能解决你的问题,请参考以下文章