2

アプリケーションの概要

JEE アプリケーションは GlassFish サーバーで実行されます。以下のシステム環境の詳細を参照し、GlassFish の組み込みモードで構成されたバンドルされた Open MQ を内部 JMS メッセージングに使用します。メッセージ コンシューマとして Message Driven Bean を使用します。MDB プール サイズはデフォルトの 32 です。以下の JMS 設定と MDB クラスの詳細を参照してください。

アプリケーションは、大まかに次のように 2 つの主要な部分と機能に分けることができます。

  • 外部システム アダプタは、さまざまな外部システムからのレガシー メッセージをリッスンし、それらを JMS メッセージとしてコア アプリケーションに送信します。
  • コア アプリケーションは、受信した JMS メッセージを処理します。MDB はここで実行されます。

問題の説明

アダプターからコアへのメッセージ配信は通常、数秒でスムーズに行われます。ただし、不明な理由により、次のような状況が永続的に発生する場合があります。アダプタによって送信されたメッセージが JMS キューで 1 分間滞留し、その後 MDB に渡されます。Open MQ 監視コマンドを使用する:imqcmd metrics dst -t q -n CacheQueueDestまたはimqcmd query dst -t q -n CacheQueueDest、送信されたメッセージがキューにあり、1 分後に MDB の onMessage メソッドが呼び出されることを確認できます。この障害のある状況が発生すると、メッセージが 1 つでもキューにスタックするため、システムの負荷とは無関係に問題が発生します。

Open MQ の DEBUGHIGH ログ レベルを設定しましたが、ログに何も見つかりませんでした。Open MQ をローカル (GlassFish プロセス内ではなく独自のプロセスで実行) として構成し、パケット レベルのログを設定しましたが、同様に何も見つかりませんでした。

この障害状態を解消する唯一の方法は、GlassFish サーバーを再起動することです。

この問題を解決するためのアイデアをいただければ幸いです。

システム環境:

  • SunOS 5.10 Generic_150401-05 i86pc i386 i86pc

  • GlassFish サーバー オープン ソース版 3.1.2.2 (ビルド 5)

  • Message Queue 4.5.2 を開く
    Oracle
    バージョン: 4.5.2 パッチ 1 (ビルド 3-d)
    コンパイル: Thu Jun 7 10:46:15 PDT 2012

  • Java バージョン "1.7.0_25"
    Java(TM) SE ランタイム環境 (ビルド 1.7.0_25-b34)
    Java HotSpot(TM) 64 ビット サーバー VM (ビルド 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) {
        ...
    }
    ...
}
4

1 に答える 1

0

この問題は、組み込みモードでいつか見つかりました。ローカル スタンドアロン モードに切り替えます (OpenMQ の個別の JVM を開始します)。その後、問題は解決されました。あなたが試すことができます。

トムズ。

于 2015-01-13T10:00:31.903 に答える