WildFly MDB 在正常关闭启动后继续使用消息

WildFly MDB continues to consume messages after graceful shutdown has initiated

提问人:canEE 提问时间:11/16/2023 最后编辑:canEE 更新时间:11/16/2023 访问量:27

问:

当我正常关闭 WildFly 时,我的 MDB 会继续使用 ActiveMQ 队列中的消息。然后线程将因 WildFly 抛出的异常而死亡。我们目前的解决方法是在触发 WildFly 关闭之前手动暂停 MDB。

我有以下 MDB 正在使用 ActiveMQ 队列中的消息:

@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");
    }
}

我在 ActiveMQ 队列上有 1000 条消息,并使用 jboss-cli 的优雅命令触发 WildFly 关闭。

command=:shutdown(timeout=120)

注意:在 WildFly EJB 子模块中启用 Graceful Txn Shutdown 已启用

然后,WildFly 将开始喷出以下异常,直到 ActiveMQ 队列为空或达到 120 秒的超时。

AMQ154004: Failed to deliver message: org.jboss.as.ejb3.component.EJBComponentUnavailableException: WFLYEJB0421: Invocation cannot proceed as component is shutting down

我还可以在日志中看到我的日志消息是在引发异常之前记录的,因为在 WildFly 中知道它应该关闭。Shutting down MyMDB

我怀疑 ActiveMQ 在从 WildFly 抛出异常时正在重新传递消息,因为我们收到此错误超过 1000 次。但最终,所有消息都将移动到 ActiveMQ 的 DLQ(死信队列)。

当我阅读 WildFly 中优雅关闭的文档时,我的理解是所有 MDB 都应该停止消费,但这似乎确实发生了。

正常关闭 WildFly 是否应该阻止 MDB 从 ActiveMQ 使用?如果应该,有没有想过为什么在我的情况下没有?

  • WildFly 版本:16.0.0.Final
  • ActiveMQ Artemis 版本:2.6.4
  • Java 版本:8
Java JMS Wildfly activeMQ-阿耳忒弥

评论

0赞 Justin Bertram 11/16/2023
我认为部分问题可能在于您正在使用 .这意味着 MDB 在使用消息时不会启动事务。因此,可能实际上不适用。如果删除该注释,行为是否会更改?@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)enable-graceful-txn-shutdown
0赞 Justin Bertram 11/16/2023
您是否在最新版本的 WildFly 上尝试过此操作?也许自 16.0.0.Final 发布以来的 4 年中已经修复了一个错误。
0赞 canEE 11/16/2023
@JustinBertram 将做一些研究。我们正在努力升级,但这是一个更大的系统/应用程序,因此升级将需要相当长的时间。@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)

答: 暂无答案