0

weblogic 10r3 サーバーで Web アプリのホストをデバッグしようとしています。アプリケーションは、com.ibm.mq.jms.MQQueueJava メッセージ駆動型 Bean を介して外部 IBM JMS キュー (クラス名: ) から入力を受信して​​います。

そのキューに接続してテスト メッセージを送信する小さなテスト アプリを作成しました。問題は、今のところテスト メッセージが例外を生成し、どういうわけかキューに戻され、何度もループしていることです。これにより、ログを読み取れないようにする多くの例外が生成されます。

最初に、テスト アプリでコンシューマーを作成して有害メッセージを削除しようとしましたが、コードは無期限にブロックされconsumer.receive()ます。

次にJMSexpiration、デフォルトの 0 の代わりに何らかの数値を設定しようとしましたが、最終的にメッセージは有効期限として 0 を使用しました。

すべてのアイデアを歓迎します。どうもありがとうございました

JMS PRODUCER の概要を示すコード:

        static String rawTradeUpload = "some long chunk of data"

        Hashtable ht = new Hashtable();

        ht.put(Context.INITIAL_CONTEXT_FACTORY,
                weblogic.jndi.WLInitialContextFactory.class.getName());

        //ht.put(Context.PROVIDER_URL, "t3://gprimeap1d.eur.nsroot.net:12016");
        ht.put(Context.PROVIDER_URL, "t3://gprimeap1d.eur.nsroot.net:12001");

        ht.put(Context.SECURITY_PRINCIPAL, "weblogic");

        ht.put(Context.SECURITY_CREDENTIALS, "welcome5");

        Connection con = null;
        Session s = null;

        try {
            if(ctx == null)

                    ctx = new InitialContext(ht);


            ConnectionFactory myConnFactory = null;

            Queue myQueue = null;

                myConnFactory = (ConnectionFactory) ctx
                        .lookup("SwiftConnectionFactory");

                con = myConnFactory.createConnection();

                s = con.createSession(false, Session.AUTO_ACKNOWLEDGE);



                myQueue = (Queue) ctx
                        .lookup("IncomingSwiftFxQueue");


                MessageProducer producer = s.createProducer(myQueue);
                Message msg = s.createTextMessage(rawTradeUpload);

                producer.send(msg); 
                    s.close();

            con.close();

        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JMSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
4

2 に答える 2

0

再配信制限を設定し、エラー キューの送信先を定義して、x 回の試行後にコンテナーがメッセージをエラー キューに移動するようにしてみましたか? これにより、プライマリ キューから有害なメッセージをなくし、問題を参照/デバッグするための専用のエラー キューを維持できます。

于 2012-07-05T15:28:12.270 に答える
0

IBM WebSphere MQ キュー マネージャーでバックアウト キューと再配信設定を構成するのは非常に簡単です。ローカル キューとともに BOThreshold と BO Queue Name を設定します。結局のところ、このセットアップを行うように彼らを説得できるかもしれません-あなたは両方とも、このソリューションの恩恵を受けて、可能な限りうまく機能しますよね?

それ以外の場合は、すべての例外をキャッチしてみてください。例外が発生した場合は、失敗したメッセージを WebLogic のエラー キューに再キューイングしてください。まともな選択のようです。

受信する必要がある場合は、代わりにタイムアウトを指定して呼び出します。

Message msg = consumer.receive(1000L);  // wait for a message for 1 sec, then continue.
于 2012-07-08T21:23:35.790 に答える