トピック・ストリングの使用

トピックは、トピック・オブジェクトで識別されるサブトピックから構成され、 サブトピックはアプリケーションによって提供されます。サブトピックをトピック名として使用するか、 サブトピックを組み合わせて新しいトピック名を形成することができます。

MQI プログラムでは、フル・トピック名は MQOPEN によって作成されます。 これは、パブリッシュ/サブスクライブ MQI 呼び出しで使用される 2 つのフィールドにより、次にリストする順序で構成されます。

  1. ObjectName フィールドで指定される、トピック・オブジェクトの TOPICSTR 属性。
  2. アプリケーションが提供するサブトピックを定義する ObjectString パラメーター。

結果のトピック・ストリングは ResObjectString パラメーターで戻されます。

各フィールドの最初の文字がブランクでもヌル文字でもなく、フィールド長がゼロより大きい場合に、これらのフィールドは存在すると見なされます。1 つのフィールドだけが存在する場合は、未変更のままトピック名として使用されます。 どちらのフィールドにも値が設定されていない場合、呼び出しは理由コード MQRC_UNKNOWN_OBJECT_NAME、または MQRC_TOPIC_STRING_ERROR (フル・トピック名が無効な場合) により失敗します。

両方のフィールドが存在する場合、結合された結果のトピック名の 2 つのエレメントの間に「/」文字が挿入されます。

表 1 は、トピック・ストリングの連結例を示しています。
表 1. トピック・ストリングの連結例
TOPICSTR ObjectString フル・トピック名 コメント
Football/Scores '' Football/Scores TOPICSTR は単独で使用される
'' Football/Scores Football/Scores ObjectString は単独で使用される
Football Scores Football/Scores '/' 文字が連結点に追加される
Football /Scores Football//Scores 2 つのストリングの間に「空ノード」が生成される
/Football Scores /Football/Scores トピックは「空ノード」で始まる

/」文字は、トピック・ツリー内でのフル・トピック名の構造を決める特殊文字と見なされます。 トピック・ツリーの構造に影響を与えるので、それ以外の目的では使用しないでください。 トピック「/Football」は、トピック「Football」と同じではありません。

以下のワイルドカード文字が特殊文字です。
  • 正符号「+
  • 番号記号「#
  • アスタリスク「*
  • 疑問符「?
これらの文字は無効とは見なされませんが、使用方法を確実に理解する必要があります。パブリッシュする際にトピック・ストリングでこれらの文字を使用しないようにすることをお勧めします。1 つのトピック・レベル内で「#」または「+」が他の文字 (それらの文字自体を含む) と混在するようなトピック・ストリングに対するパブリッシュでは、どちらかのワイルドカード体系を使用してサブスクライブできます。2 つの「/」文字間の唯一の文字として「#」または「+」があるトピック・ストリングに対するパブリッシュでは、ワイルドカード体系 MQSO_WILDCARD_TOPIC を使用するアプリケーションによって明示的にサブスクライブできないトピック・ストリングが作成されます。この結果、アプリケーションは想定より多くのパブリケーションを取得します。

コード・スニペットの例

このコード・スニペットは、サンプル・プログラムの例 2: 可変トピックへのパブリッシャーから抽出したもので、トピック・オブジェクトと可変トピック・ストリングを結合しています。
MQOD     td = {MQOD_DEFAULT};  /* Object Descriptor            */
td.ObjectType = MQOT_TOPIC;    /* Object is a topic            */
td.Version = MQOD_VERSION_4;   /* Descriptor needs to be V4    */
strncpy(td.ObjectName, topicName,  MQ_TOPIC_NAME_LENGTH);
td.ObjectString.VSPtr = topicString;
td.ObjectString.VSLength = (MQLONG)strlen(topicString);
td.ResObjectString.VSPtr = resTopicStr;
td.ResObjectString.VSBufSize = sizeof(resTopicStr)-1;
MQOPEN(Hconn, &td, MQOO_OUTPUT | MQOO_FAIL_IF_QUIESCING, &Hobj, &CompCode, &Reason);

資料 資料

フィードバック

タイム・スタンプ・アイコン 最終更新: 2018 年 10 月 2 日 (火)
http://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.ref.dev.doc/com.ibm.mq.ref.dev.doc/q100210_.htm fr36000_