【发布时间】:2020-05-24 21:28:26
【问题描述】:
我有一个 Spring Boot 应用程序,其不同部分通过 JMS 连接。我使用外部 ActiveMQ Artemis(在不同的 docker 容器中)。
当我通过 gradle bootRun 运行 Spring Boot 应用程序时,一切正常 - 消息传递时不会丢失。
但是当我在 Wildfly 中运行应用程序时,并非所有消息都已传递。一些消息丢失(大约一半)。我在 Wildfly 中使用 pooled connection factory 配置外部消息代理,并执行用于创建 outbound-socket-binding、remote-connector 和 pooled-connection-factory 的命令。
在 Wildfly 的日志中,我得到了很多:
2020-05-24 20:52:28,508 DEBUG [org.apache.activemq.artemis.service.extensions.xa.recovery] (Periodic Recovery) looking for recover at ClientSessionImpl [name=44c73a79-9dff-11ea-8d1c-0242ac110004, username=null, closed=false, factory = org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl@2af3f7bd, metaData=()]@410fad2f configuration [XARecoveryConfig [transportConfiguration=[TransportConfiguration(name=, factory=org-apache-activemq-artemis-core-remoting-impl-netty-NettyConnectorFactory) ?port=61616&localAddress=0-0-0-0&host=my-host], discoveryConfiguration=null, username=null, password=****, JNDI_NAME=java:/jms/remoteArtemisJms]]
并且在 ActiveMQ 日志中永久出现:
2020-05-24 21:16:18,063 DEBUG [org.apache.activemq.artemis.core.server.impl.QueueImpl] QueueImpl[name=30b977b0-ac39-431e-9957-2a9ac1f8b64f, postOffice=PostOfficeImpl [server=ActiveMQServerImpl::serverUUID=0b678ade-9de8-11ea-9475-0242ac110002], temp=true]@3a205718 adding consumer ServerConsumerImpl [id=1860, filter=null, binding=LocalQueueBinding [address=jms.topic.tasks, queue=QueueImpl[name=30b977b0-ac39-431e-9957-2a9ac1f8b64f, postOffice=PostOfficeImpl [server=ActiveMQServerImpl::serverUUID=0b678ade-9de8-11ea-9475-0242ac110002], temp=true]@3a205718, filter=null, name=30b977b0-ac39-431e-9957-2a9ac1f8b64f, clusterName=30b977b0-ac39-431e-9957-2a9ac1f8b64f0b678ade-9de8-11ea-9475-0242ac110002]]
对于每个队列或主题。看起来像是永久重新连接。
当我启动 Wildfly 应用程序时,ActiveMQ 管理控制台闪烁(左侧菜单中的图标变为灰色)。当我停止应用程序时,管理控制台中的闪烁停止,菜单项为绿色。
所以,问题:
- 如何排查和修复 Wildfly 中的消息传递问题(永久重新连接)?
- 什么是定期恢复?为什么会发生?
- ActiveMQ 管理控制台中的绿色和灰色图标是什么意思?它为什么会闪烁以及如何解决?
【问题讨论】:
标签: spring-boot wildfly activemq-artemis