You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:37:24