2017-08-10 29 views
0

IBM MQキューのリスナーを作成しようとしています。ネイティブAPIを使用してキューに配置されたときにメッセージを読み取るようにしています。IBM MQのリスナー

毎秒GETを実行するには、Thread/TimerTaskを使用する方がよいでしょうか。

認証目的でCCDT、ユーザー名とパスワードを使用する必要があります。

デフォルトのリスナーはありますか?コード

MQMessage theMessage = new MQMessage(); 
MQGetMessageOptions mqGetMessageOptions = new MQGetMessageOptions(); 

mqGetMessageOptions.options=MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST; 
mqGetMessageOptions.matchOptions=MQC.MQMO_NONE; 
mqGetMessageOptions.waitInterval=5000; 
try{ 
     //read the message from queue   
queue.get(theMessage,mqGetMessageOptions); 
    mqGetMessageOptions.options = MQC.MQGMO_MSG_UNDER_CURSOR; 

    queue.get(theMessage, mqGetMessageOptions); 
+0

ユーザー名とパスワードの認証にCCDTを使用する必要がありますか?これを認証するのは何ですか?このMQ v8以降のネイティブ接続認証ですか、これはサーバー側のセキュリティ出口の形式ですか? MQ v8以降への認証方法の1つはmqcredの終了です。なぜ、CCDTを使用する必要があると思いますか? – JoshMc

+0

ええとqueueManager =新しいMQQueueManager(qManager、chanTab);私はキューマネージャに接続するためにCCDTファイルを渡します – Nayeem

+0

私はいくつかの相違点の質問をしました。「うん」は何を指していますか?キューマネージャがMQ v8以降の接続認証を使用していることを確認していますか? – JoshMc

答えて

0

あなたのコードの下に使用してからの読み込み は、それらを消費する(大きな違いを)メッセージを参照していません。

第2に、常にMQC.MQGMO_FAIL_IF_QUIESCINGオプションを使用する必要があります。 すなわち

mqGetMessageOptions.options=MQC.MQGMO_WAIT | MQC.MQGMO_BROWSE_FIRST | MQC.MQGMO_FAIL_IF_QUIESCING; 

第三に、キューにアクセスするためにポーリングを使用しないでください - あなたのスレッド/タイマーアイデアを。それは資源の無駄です。 MQGETにはすでに5秒の待機時間が設定されています。十分な長さでない場合は、より妥当なものに増やしてください。

最後に、この質問に「JMS」というタグを付ける理由は何ですか?あなたの質問にはJMSに関して何もありません。

+0

JMSを使用してMQに接続することもできます。基本的に私はMQ listnerのための解決策が必要です..私は既にAPIを使用しているリスナーを持っていますが、認証のためにCDTファイルを受け入れていません – Nayeem

+0

D'oh!もちろん違います。 CCDTファイルには接続情報が含まれているため、決してUserIdとPasswordは含まれていないはずです。コードでUsertIdとパスワードを設定します。 JMSの場合、createQueueConnection()メソッドにあります。 – Roger