wmqjava サンプル プログラムを使用して MQ マネージャーに接続し、メッセージを REQUEST キューに入れ、RESPONSE キューから応答を取得しました。
メッセージを入れたり受け取ったりできます。RESPONSE QUEUE に複数のメッセージが到着した場合、正しいメッセージを取得できませんでした。
このアプローチでリクエストとレスポンスを関連付ける方法があるかどうかアドバイスしてください。
このアプローチが推奨されるかどうかもアドバイスしてください。
wmqjava サンプル プログラムを使用して MQ マネージャーに接続し、メッセージを REQUEST キューに入れ、RESPONSE キューから応答を取得しました。
メッセージを入れたり受け取ったりできます。RESPONSE QUEUE に複数のメッセージが到着した場合、正しいメッセージを取得できませんでした。
このアプローチでリクエストとレスポンスを関連付ける方法があるかどうかアドバイスしてください。
このアプローチが推奨されるかどうかもアドバイスしてください。
相関 ID は、要求メッセージと応答メッセージを関連付ける最良の方法です。次のことを行う必要があります。
リクエスター側で:
1) リクエスト メッセージの送信後に、リクエスト メッセージのメッセージ ID をキャッシュします。
2) メッセージの取得中に MQGetMessageOptions.matchOptions フィールドに MQMO_MATCH_CORREL_ID を指定し、上記のメッセージ ID を一致する値として指定します。
レスポンダ側で:
1) リクエスト メッセージからメッセージ ID を取得します。
2) 応答メッセージの送信中に、応答メッセージの相関 ID を要求メッセージのメッセージ ID に設定します。
これが、リクエスト メッセージとレスポンス メッセージを相互に関連付ける方法です。リクエスタ用の小さなスニペット。
// Send request message
MQMessage requestMessage = new MQMessage();
requestMessage.writeUTF("Request Message");
reqQueue.put(requestMessage);
// Receive response
MQMessage responseMessage = new MQMessage();
responseMessage.correlationId = requestMessage.messageId;
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.matchOptions = CMQC.MQMO_MATCH_CORREL_ID;
respQueue.get(responseMessage,gmo);