WebSphere® MQ は、サブスクリプションを作成するときに、フィルターを指定する機能を提供します。ただし、この機能はヘッダーの項目のみを参照します。WebSphere Message
Broker は、WebSphere MQ のコンテンツ・フィルタリング・プロバイダーとして機能できます。そのため、パブリケーションの本文にあるエレメントを参照できるサブスクライバーが、拡張フィルターを指定できるようになります。
WebSphere MQ サブスクライバーがこのサービスを使用できるようにするため、コンテンツのフィルター操作をbroker で使用可能にする必要があります。
始める前に
- WebSphere MQ でのセレクターに関する情報を参照してください。
- WebSphere MQ がメッセージのコンテンツを選択する方法について以下の概要を参照してください。
アプリケーションがあるトピック・ストリングに関するパブリッシュを行い、1 つ以上のサブスクライバーがメッセージの内容に基づいて選択を行う選択ストリングを持っている場合、WebSphere MQ は拡張メッセージ選択プロバイダーに対して、パブリケーションを構文解析することと、各サブスクライバーが内容フィルターで指定している選択基準にパブリケーションが一致しているかどうかを WebSphere MQ に知らせることを要求します。
拡張メッセージング選択プロバイダーにより、パブリケーションがサブスクライバーの選択ストリングと一致すると判断された場合、メッセージはサブスクライバーに引き続き送信されます。
拡張メッセージング選択プロバイダーにより、パブリケーションが一致しないと判断された場合、メッセージはサブスクライバーに送信されません。 これにより、WebSphere MQ MQPUT または MQPUT1 呼び出しが理由コード MQRC_PUBLICATION_FAILURE で失敗する場合があります。 拡張メッセージング選択プロバイダーがパブリケーションを構文解析できない場合、理由コード MQRC_CONTENT_ERROR が戻され、MQPUT または MQPUT1 呼び出しは失敗します。
拡張メッセージング選択プロバイダーが使用できない場合、あるいはサブスクライバーがパブリケーションを受け取るかどうかを拡張メッセージング選択プロバイダーが判断できない場合は、理由コード MQRC_SELECTION_NOT_AVAILABLE が戻され、WebSphere MQ MQPUT または MQPUT1 呼び出しは失敗します。
コンテンツ・フィルターを使用したサブスクリプションの作成中に、拡張メッセージ選択プロバイダーが使用できない場合、WebSphere MQ MQSUB 呼び出しは理由コード MQRC_SELECTION_NOT_AVAILABLE で失敗します。 コンテンツ・フィルターを使用したサブスクリプションの再開中に、拡張メッセージ選択プロバイダーが使用できない場合、WebSphere MQ MQSUB 呼び出しは警告 MQRC_SELECTION_NOT_AVAILABLE を戻しますが、サブスクリプションを再開することはできます。
z/OS® システムでは、メッセージ・ブローカー開始済みタスク ID に、クラス MQCONN のプロファイル <MQ_QMNAME>.BATCH に対する UPDATE アクセス権があることを検証します。


Linux、 UNIX、および Windows システムでは、キュー・マネージャーに対するシステム権限を次のように付与します: setmqaut -t <qmgr> +system -p
<brokerUserId>
WebSphere Message
Broker は、WebSphere MQ で提供されるメッセージ選択のサポートを拡張します。 WebSphere Message
Broker は、SQL92 ステートメントではなく、ESQL ステートメントを許可し、メッセージの内容に基づいてフィルター操作を行うことによって、これを行います。 サポートされる ESQL の有効範囲と除外の詳細については、ESQL を使用したコンテンツ・ベースのフィルター操作を参照してください。
現在実装しているコンテンツ・ベースのフィルター操作の外見上の主な違いは、以下のとおりです。
- コンテンツ・ベースのフィルター操作は WebSphere MQ MQRFH2 サブスクライバーに限定されなくなりました。 WebSphere Message
Broker は、以下の WebSphere MQ サブスクライバー用のコンテンツのフィルター操作サービスを提供します。
z/OS で、MQRFH2 ヘッダー内の
NameValueData フィールドに基づくコンテンツ・フィルター操作を実行する場合は、第 1 または第 2 の MQRFH2 ヘッダーにデータが存在する可能性があります。 例えば、以下のようなフィルターがあるとします。
Root.MQRFH2.mcd.Msd='XML'
このフィルターは、
z/OS では、意図したとおりに動作しない可能性があります。
すべての MQRFH2 ヘッダーを検索する場合は、以下の構文を使用します。
FOR ANY Root.MQRFH2[] AS I (I.mcd.Msd='XML')
- WebSphere MQ メッセージ・プロパティーは、フィルター式の一部としてサポートされます。
- パブリケーションに mcd フォルダーが含まれていない場合、ペイロードは XMLNSC であると想定されます。
WebSphere Message
Broker でのコンテンツ・ベースのフィルター操作を使用可能にする方法を確認するには、以下のステップを参照してください。
- コンテンツ・ベースのフィルター操作を実行する実行グループに対して、ContentBasedFiltering オブジェクトの cbfEnabled プロパティーを設定します。
コマンド行から
cbfEnabled プロパティーを設定するには、以下のいずれかの方法を使用します。
コンテンツ・ベースのフィルター操作を動作させるには、cbfEnabled プロパティーを明示的に使用可能にする必要があります。デフォルトの設定ではコンテンツ・ベースのフィルター操作はオフになっています。
- 実行グループを再始動して、この変更を有効にします。
z/OS では、複数の実行グループでコンテンツ・ベースのフィルター操作を有効にした場合でも、
コンテンツ・ベースのフィルター操作がアクティブになるのは、一度に 1 つの実行グループだけになります。 コンテンツ・ベースのフィルター操作が有効になっている後続の実行グループは、キュー・マネージャーに接続できない場合、コンテンツ・ベースのフィルター操作のスレッドごとに以下のメッセージを (まずは始動時に、その後は 30 分ごとに) syslog に伝搬します。
BIP2111E MQ04BRK jheg1 15 MESSAGE BROKER INTERNAL ERROR: DIAGNOSTIC INFORMATION
'Error occurred in Content Based Filtering Thread'. : ImbCbfWorker(909)
BIP2624E MQ04BRK jheg1 14 UNABLE TO CONNECT TO QUEUE MANAGER 'MQ04': MQCC=2;
MQRC=2002; MESSAGE FLOW NODE 'ContentBasedFiltering'. : ImbCbfWorker(214)
現時点でコンテンツ・ベースのフィルター操作のサービスを提供している実行グループを停止すると、コンテンツ・ベースのフィルター操作が有効になっている別の実行グループがキュー・マネージャーに接続し、コンテンツ・ベースのフィルター操作のサービスを提供するようになります。
コンテンツ・ベースのフィルター操作が使用可能になっている場合、evaluationThreads プロパティーと validationThreads プロパティーの両方はデフォルトで 1 になります。
評価スレッドは、パブリケーション時に、指定されたパブリケーションに対してコンテンツ・フィルターを妥当性検査するために使用されます。 多数のパブリケーションが存在するネットワークでは、パブリケーション時にワークロードを処理するために evaluationThreads プロパティーを増やす必要があります (最大 32 個まで)。
妥当性検査スレッドは、サブスクリプション時にコンテンツ・フィルターの構文を妥当性検査するために使用されます。 多数のサブスクライバー、特に動的サブスクライバーが存在するパブリッシュ/サブスクライブネットワークでは、高スループットのサブスクリプション要求を処理するために validationThreads プロパティーを増やす必要があります (最大 32 個まで)。
この機能は複数の実行グループで使用可能にできますが、パブリッシュ・メッセージを構文解析するために必要な (およびそのメッセージの mcd フォルダーで参照される) メッセージ・セットが、コンテンツ・ベースのフィルター操作が使用可能になっているすべての実行グループにデプロイされていることを確認する必要があります。
評価スレッド内のメッセージの構文解析中にエラーが発生すると、WebSphere MQ は MQRC_CONTENT_ERROR をパブリッシュ・アプリケーションに戻します。 構文解析エラーは、イベント・ログにも WebSphere Message
Broker 例外として表示されます。
フィルター内の ESQL およびメッセージ・プロパティーを処理するサブスクリプション
<psc> フォルダーの例:
<psc>
<Command>RegSub</Command><Topic>topic</Topic>
<Filter>
SUBSTRING(Root.XMLNSC.Name.FirstName FROM 1 FOR 1) = ‘J' and usr.flag = ‘yes'
</Filter>
</psc>