wildfly - WildFly 10.1.0:服务器运行时出现 ActiveMQConnectionTimedOutException
问题描述
我们有一个配置了 ActiveMQ Artemis 的 WildFly 10 实例。
服务器运行数周后,我们在将消息放入队列时发现此错误:
WARN [com.arjuna.ats.jta] (default task-39) ARJUNA016061: TransactionImple.enlistResource - XAResource.start returned: XAException.XAER_RMFAIL for < formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a4809a7:12ad14f2:613b6c2b:8c8976c, node_name=1, branch_uid=0:ffff0a4809a7:12ad14f2:613b6c2b:8c89779, subordinatenodename=null, eis_name=java:/JmsXA NodeId:560e8de4-ccea-11eb-a9ec-014175cacf74 >: javax.transaction.xa.XAException
at org.apache.activemq.artemis.ra.ActiveMQRAXAResource.start(ActiveMQRAXAResource.java:85)
at org.apache.activemq.artemis.service.extensions.xa.ActiveMQXAResourceWrapperImpl.start(ActiveMQXAResourceWrapperImpl.java:121)
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:662)
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:423)
...
Caused by: ActiveMQConnectionTimedOutException[errorType=CONNECTION_TIMEDOUT message=AMQ119014: Timed out after waiting 30,000 ms for response when sending packet 44]
at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:398)
at org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:304)
at org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQSessionContext.simpleRollback(ActiveMQSessionContext.java:299)
at org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.rollback(ClientSessionImpl.java:542)
at org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.rollback(ClientSessionImpl.java:513)
at org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.resetIfNeeded(ClientSessionImpl.java:594)
at org.apache.activemq.artemis.ra.ActiveMQRAXAResource.start(ActiveMQRAXAResource.java:80)
... 131 more
在重新启动服务器之前,队列上的每个操作都会出现此错误。
异常由本地客户端记录(部署在应用程序服务器本身的战争)。本地客户端发送消息,有远程消费者使用它们。当错误发生时,因为负载不高于平时。我没有收集线程转储,如果再次发生错误,我可以尝试收集它们。
子系统配置为:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
<server name="default">
<management jmx-enabled="true" />
<security enabled="false" />
<bindings-directory
path="/data/activemq/bindings" />
<journal-directory path="/data/activemq/journal" />
<large-messages-directory
path="/data/activemq/largemessages" />
<paging-directory path="/data/activemq/pages" />
<security-setting name="#">
<role name="guest" delete-non-durable-queue="true"
create-non-durable-queue="true" consume="true" send="true" />
</security-setting>
<address-setting name="#"
message-counter-history-day-limit="10" page-size-bytes="2097152"
max-size-bytes="104857600" max-delivery-attempts="-1"
redelivery-delay="300000" expiry-address="jms.queue.ExpiryQueue"
dead-letter-address="jms.queue.DLQ" />
<address-setting
name="jms.queue.queue1" max-delivery-attempts="-1"
expiry-address="jms.queue.ExpiryQueue"
dead-letter-address="jms.queue.DLQ" redelivery-delay="120000" />
<http-connector name="http-connector"
endpoint="http-acceptor" socket-binding="messaging" />
<http-connector name="http-connector-throughput"
endpoint="http-acceptor-throughput" socket-binding="messaging">
<param name="batch-delay" value="50" />
</http-connector>
<in-vm-connector name="in-vm" server-id="0" />
<http-acceptor name="http-acceptor"
http-listener="default" />
<http-acceptor name="http-acceptor-throughput"
http-listener="default">
<param name="batch-delay" value="50" />
<param name="direct-deliver" value="false" />
</http-acceptor>
<in-vm-acceptor name="in-vm" server-id="0" />
<jms-queue name="ExpiryQueue"
entries="java:/jms/queue/ExpiryQueue" />
<jms-queue name="DLQ" entries="java:/jms/queue/DLQ" />
<jms-queue name="queue1"
entries="queue1 queue/queue1 jms/queue/queue1 java:jboss/exported/queue1" />
<!--
...
--->
<jms-queue name="queueN"
entries="queueN queue/queueN jms/queue/queueN java:jboss/exported/queueN" />
<connection-factory name="InVmConnectionFactory"
entries="java:/ConnectionFactory" connectors="in-vm" />
<connection-factory
name="RemoteConnectionFactory"
failover-on-initial-connection="true" reconnect-attempts="-1"
block-on-acknowledge="true" consumer-window-size="0"
client-failure-check-period="10000" ha="true"
entries="java:jboss/exported/jms/RemoteConnectionFactory"
connectors="http-connector" />
<pooled-connection-factory
name="activemq-ra" transaction="xa"
entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory"
connectors="in-vm" />
</server>
</subsystem>
有没有配置错误?任何人都可以为这个错误提出解决方案吗?
解决方案
WildFly 10.1.0 于 2016 年 8 月发布,它使用了 2015 年 10 月发布的 ActiveMQ Artemis 1.1.0,距今已近 6 年。WildFly 现在是 25 版,而 ActiveMQ Artemis 现在是 2.18.0。我强烈建议您升级到 WildFly 的更高版本,甚至使用最新版本的 ActiveMQ Artemis独立版(即未嵌入 WildFly)。
即使在1.1.0 中发现了一个错误,这个版本也不会发布错误修复版本。为了获得任何类型的修复,您将被迫升级到最新版本,除非您向后移植修复并自己构建它。值得注意的是,自 1.1.0 发布以来,ActiveMQ Artemis 中已修复了数百个错误。您的问题很可能就在其中。
推荐阅读
- java - 获取所有已安装 Android 应用程序的列表,getPackageManager 和/或 ResolveInfo 的问题?
- node.js - 从托管服务器执行时脚本不起作用
- python-3.x - Word Wrapped QLabel 提前截断文本
- javascript - JavaScript Cookie 同意通知会重新出现,除非它在主页上被单击关闭
- c# - 使用 openXml 将样式表添加到 Excel 时出错
- powerbi - Power BI 如何在 x 轴上显示重复值?
- c# - 如何在 C# 中创建画布?
- linux - Docker Compose 静态 IP 寻址
- ios - 从 Firestore 和身份验证中快速删除用户
- vue.js - 为什么这个简单的 VueJS 2.x 组件会从嵌套的 HTML 表格元素中提升出来?