2016-11-01 15 views
2

MQメッセージを送信していて、返されたメッセージIDと相関IDを期待どおりに返しています。C#IBM MQクライアントが自分のメッセージIDを送信しています

アプリケーションを負荷テストツールに入れて、キューマネージャによって返されたmessageIDが以前のメッセージと同じであることがわかりました。これらの場合、同じメッセージで次のメッセージを読み取れませんでしたmessageID。

私はキュー・マネージャーの所有者ではなく、管理者からの応答は「独自のメッセージIDを作成しました」。

できますか? messageIDには特定の形式が必要ですか?

これは私のコードです:私は以下のように、メッセージを送信する前に

  message = strInputMsg; 
      queueMessage = new MQMessage(); 
      queueMessage.WriteString(message); 
      queueMessage.Format = MQC.MQFMT_STRING; 
      queueMessage.Expiry = timeOutExpiry; 
      queueMessage.ReplyToQueueName = QueueNameExpiry; 
      queuePutMessageOptions = new MQPutMessageOptions(); 
      queuePutMessageOptions.Options =  MQC.MQRO_COPY_MSG_ID_TO_CORREL_ID; 
      queue.Put(queueMessage, queuePutMessageOptions); 
      bytReturn = queueMessage.MessageId; 

だから私は自分のメッセージID値にメッセージIDプロパティを設定することができますか?

queueMessage.MessageId = myOwnMessageId 
+0

独自のメッセージIDを生成することをお勧めします。ベスト・プラクティスは、要求メッセージIDを応答相関IDにコピーすることです – Stavr00

答えて

1

はい、それはコードが明示的にメッセージIDを設定している可能性がありますが、あなたのコードは、それが通常起こるかであるMQMD構造を再利用していないように見えます。負荷テストツールが同じメッセージを複数回再生し、その間にメッセージIDを保持している場合は、説明とコードに基づいている可能性が高くなります。

メッセージIDの設定が許可されている場合、MQはメッセージIDを生成するIDのキューマネージャ内で一意であることを保証します。多くのキュー・マネージャーでGUIDが保証されるわけではありませんが、メッセージIDにQMgr名の12文字を含めることで、衝突を確実に防止しようとします。したがって、どの負荷テストツールが使用されているかについての情報はなく、メッセージ再生を使用する場合、その可能性ははるかに高いようです.Net MQMessage()クラスコンストラクタの実行中にメッセージIDを重複させるバグがあります。

ご覧ください。
MQMessage.NET classを言いた「デフォルトのメッセージ記述子情報をMQMessageオブジェクトを作成します...」もちろん、デフォルトMQMDは、メッセージIDを生成するQMGRの原因となります。

MQMD - MsgId (MQBYTE24)ここでは、MsgIDがユニークで、メッセージを配置するアプリケーションによってどのように制御されるのかについて、下の注記で説明しています。

関連する問題