WildFly优雅关闭后MDB仍消费ActiveMQ消息问题咨询
WildFly优雅关闭时MDB仍持续消费ActiveMQ消息导致消息进入DLQ问题
执行WildFly优雅关闭操作时,MDB仍持续从ActiveMQ队列消费消息,随后线程因WildFly抛出的异常终止。目前临时解决方案是在触发WildFly关闭前手动暂停MDB。
MDB代码实现
@ResourceAdapter("activemq") @MessageDriven(name = "MyMDB", activationConfig = { @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "my_queue"), @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") }) @TransactionManagement(TransactionManagementType.CONTAINER) @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) @Pool(value = "my-pool") public class MyMDB implements MessageListener { @Override public void onMessage(final Message message) { ... } @PreDestroy public void shutdown() { LOG.info("Shutting down MyMDB"); } }
优雅关闭命令
通过jboss-cli执行以下命令:
command=:shutdown(timeout=120)
注:WildFly EJB子模块中的Enable Graceful Txn Shutdown已启用
异常现象
ActiveMQ队列初始有1000条消息,执行关闭命令后,WildFly会持续抛出以下异常,直到队列空或120秒超时:
AMQ154004: Failed to deliver message: org.jboss.as.ejb3.component.EJBComponentUnavailableException: WFLYEJB0421: Invocation cannot proceed as component is shutting down
日志中可见Shutting down MyMDB在异常前输出,说明WildFly已触发关闭流程。怀疑ActiveMQ因WildFly抛出异常而重发消息,导致错误次数超1000次,最终所有消息转入ActiveMQ的DLQ(死信队列)。
核心疑问
根据WildFly优雅关闭文档,MDB应停止消费,但实际未生效。请问:
- WildFly优雅关闭是否应阻止MDB消费ActiveMQ消息?
- 若应生效,我的场景中未生效的原因是什么?
环境信息
- WildFly版本:16.0.0.Final
- ActiveMQ Artemis版本:2.6.4
- Java版本:8
内容的提问来源于stack exchange,提问作者canEE
相关产品推荐
相关产品推荐

