gpt4 book ai didi

java - Open MQ 异常现象 : unexpectedly messages start to get stuck in the JMS Queue for a while before delivering them to the MDB

转载 作者:行者123 更新时间:2023-11-29 08:48:46 24 4
gpt4 key购买 nike

应用程序简要概述

JEE 应用程序在 GlassFish 服务器中运行,请参阅下面的系统环境详细信息,并使用在 GlassFish 中以嵌入式模式配置的捆绑 Open MQ 进行内部 JMS 消息传递。作为消息消费者使用 Message Driven Bean。 MDB 池大小默认为 32,请参阅下面的 JMS 配置和 MDB 类详细信息。

应用主要分为两部分,功能大致如下:

  • 外部系统适配器监听来自各种外部系统的遗留消息,并将它们作为 JMS 消息发送到核心应用程序。
  • 核心应用程序处理接收到的 JMS 消息。 MDB 在这里运行。

问题描述

从适配器到核心的消息传递通常只需要几秒钟就可以顺利进行。然而,由于未知原因,有时会永久发生以下情况:适配器发送的消息在 JMS 队列中停留一分钟,然后才传递给 MDB。使用 Open MQ 监控命令:imqcmd metrics dst -t q -n CacheQueueDestimqcmd query dst -t q -n CacheQueueDest 我们可以看到发送的消息在队列中并且只一分钟后,将调用 MDB 的 onMessage 方法。当这种故障情况发生时,即使是一条消息也会卡在队列中,因此问题将独立于系统负载而存在。

我已经为 Open MQ 设置了 DEBUGHIGH 日志级别,但在日志中没有发现任何内容。我已将 Open MQ 配置为本地(在自己的进程中运行,而不是在 GlassFish 进程中运行)并设置了数据包级别的日志记录,但同样什么也没发现。

摆脱这种错误状态的唯一方法是重新启动 GlassFish 服务器。

如果有任何解决此问题的想法,我将不胜感激。

系统环境:

  • SunOS 5.10 Generic_150401-05 i86pc i386 i86pc

  • GlassFish Server 开源版 3.1.2.2(build 5)

  • 打开 Message Queue 4.5.2
    甲骨文
    版本:4.5.2 补丁 1(Build 3-d)
    编译:2012 年 6 月 7 日星期四 10:46:15 PDT

  • Java 版本“1.7.0_25”
    Java(TM) SE Runtime Environment (build 1.7.0_25-b34)
    Java HotSpot(TM) 64 位服务器虚拟机(内部版本 23.25-b03,混合模式)

来自 domain.xml 的 JMS 配置:

<resources>
<admin-object-resource
res-adapter="jmsra"
res-type="javax.jms.Queue"
jndi-name="jms/cacheQueue">
<property name="Name" value="CacheQueueDest"></property>
</admin-object-resource>

<connector-connection-pool
name="jms/cacheConnFactory"
resource-adapter-name="jmsra"
is-connection-validation-required="true"
connection-definition-name="javax.jms.QueueConnectionFactory"
max-wait-time-in-millis="6000"
fail-all-connections="true"
transaction-support="NoTransaction"/>
</resources>

<configs>
<config name="server-config">

<mdb-container/>

<jms-service default-jms-host="default_JMS_host">
<jms-host port="59900" host="localhost" name="default_JMS_host"></jms-host>
</jms-service>
</config>
</configs>

MDB 类:

...
import javax.jms.Message;
import javax.jms.MessageListener;
...
@MessageDriven(mappedName = "jms/cacheQueue", messageListenerInterface = javax.jms.MessageListener.class)
public class CacheChange implements MessageListener {
...
@TransactionAttribute(value = TransactionAttributeType.NOT_SUPPORTED)
@Override
public void onMessage(final Message message) {
...
}
...
}

最佳答案

我在嵌入式模式下的某个时候发现了这个问题,我们切换到本地独立模式(启动OpenMQ单独的JVM),之后问题就解决了。你可以试试。

汤姆兹。

关于java - Open MQ 异常现象 : unexpectedly messages start to get stuck in the JMS Queue for a while before delivering them to the MDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23786624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com