1

MQ キューで「通常」を実行するMQGETと、有効期限が切れたメッセージ (有効期限が過ぎたもの) は取得されないということを理解しています。代わりに、それらは破棄され、キュー内の次のメッセージが試行されます。

私の質問は、相関するMQGET 操作に関するものです。特定の相関 ID を持つメッセージを具体的に探しているため、期限切れのメッセージが破棄される通常のメカニズムをバイパスしますか?

言い換えれば、彼らは特定のメッセージを探しているので、そのメッセージに直行するのでしょうか?

明らかに、そのメッセージの有効期限が切れた場合、それは破棄されます。私の質問は、その時点より前のキュー内のメッセージに関係しています。

4

1 に答える 1

2

期限切れのメッセージは、MsgId または CorrelId で直接取得した場合でも、次に取得した場合でも、アプリケーションに返されることはありません。

有効期限が切れたメッセージは、内部タスクによって、およびメッセージに通知する MQGET を渡すことによって、キューから消去されます。

これについては、developerWorksで詳しく説明されており、次のように記載されています。

z/OS プラットフォームでこの状況 (MQGET が読み取ろうとしていないために期限切れのメッセージがキューに残されている) を解決するには、EXPRYINT (有効期限間隔) キュー・マネージャー属性を使用して、メッセージを削除する期間を指定できます。有効期限に達するたびに、キュー マネージャーはキューをスキャンして期限切れのメッセージを破棄します。

キュー・マネージャーが UNIX 分散プラットフォーム上にある場合、MQ V6 には、分散プラットフォームに対して同様の方法で機能する期限切れタスクが組み込まれています。

IBM には、動作の詳細を説明したより公式な技術情報もあり、こちらに次のように記載されています。

WMQ V6.0 から、期限切れのメッセージをサイレントに内部的に破棄する機能が追加されました。

メッセージが期限切れになると、次の場合に破棄されます: メッセージに一致する MQGET が発行された場合、または キュー マネージャーの有効期限タスクによって内部的に削除された場合。

デフォルトでは、内部失効タスクは 300 秒 (5 分) ごとに実行されます。このタスクの頻度を変更したい場合は、「ExpiryInterval」設定を使用できます。この値は秒単位で構成され、範囲は 1 ~ 1,000,000 秒です。値を「0」に設定すると、タスクが無効になります。

z/OS では、「ExpiryInterval」はキュー マネージャーの属性です。分散プラットフォームでは、キュー マネージャーの qm.ini ファイルの「TuningParameters」スタンザに「ExpiryInterval」を追加できます。

于 2014-11-11T21:13:21.433 に答える