発行および購読メッセージ・ルーティングの定義
InterSystems IRIS® では、発行および購読メッセージ配信がサポートされています。発行および購読は、特定のトピックに関するメッセージが通知されるようにあらかじめ登録されているかどうかに基づいて、1 つ以上のサブスクライバにメッセージをルーティングする方法を意味します。
発行と購読の概要
メッセージングの発行と購読では、以下の要素間の実行時のインタフェースに基づき、処理が行われます。
メッセージ
メッセージは、プロダクション・メッセージです。外部のシステムでは、要求を受信し、InterSystems IRIS に転送します。InterSystems IRIS では、それをプロダクション・メッセージに変換して、特定用途のビジネス・オペレーションに送信して処理します。
トピック
トピックは、メッセージの内容を説明する文字列です。InterSystems IRIS では、トピックが定義されていません。ユーザおよびそのアプリケーションで、トピックとサブトピックの意味を定義します。
トピック文字列は、A.B.C.D という形式です。ここで、A、B、C、および D は、ピリオド (.) で区切られたサブトピック文字列です。(ピリオド) 文字。トピックには、任意数のサブトピックを含めることができます。それぞれのサブトピックの最大長は 50 文字です。以下は、すべて有効なトピック文字列です。
books books.fiction books.fiction.latin
ワイルドカード文字として * (アスタリスク) を使用してトピックの範囲を指定できます。以下に例を示します。
-
* はトピック文字列内の任意の完全なサブトピックを置き換えることができます (books.*.latin は機能します)。
-
* は、部分的なワイルドカードとしては機能しません (*s.fiction は機能しません。これには、books.fiction や reviews.fiction などの文字列が適合しません)。
-
後続の * 文字は、トピック文字列の最後の . (ピリオド) の右に追加される任意数のサブトピックに適合します(books.* は、books.fiction および books.fiction.latin に適合します)。
サブスクライバ
サブスクライバは、特定のトピックまたはトピックのセットに関連するエンティティ (ユーザまたは外部システム) です。サブスクライバのエントリにより、そのエンティティへのアクセス方法 (InterSystems IRIS でメッセージをそこにどのように送信するか) を指定します。
サブスクリプション
サブスクリプションは、サブスクライバとトピック文字列を関連付けます。
3 つのサブスクライバがあると仮定します。
Abel Baker Charlie
また、3 つのトピックがあり、A.B.C で person.location.identifer を表す規則があるとします。
Doctor.ICU.88495 Patient.LAB.* *.*.X3562564
この場合、以下のようなサブスクリプションを定義できます。
サブスクライバ | トピック |
---|---|
Abel | Doctor.ICU.88494 |
Abel | Doctor.ICU.88495 |
Baker | Doctor.ICU.88495 |
Baker | Patient.LAB.* |
Charlie | *.*.X3562564 |
これは、以下のような意味になります。
-
Abel は、Doctor.ICU.88494 または Doctor.ICU.88495 というトピックが処理される場合のみ通知されます。
-
Baker は Doctor.ICU.88495 というトピックが処理される場合に通知されます。また、Baker は研究室 (LAB) の患者 (Patient) に関する任意のメッセージが処理される場合も通知されます。
-
Charlie は X3562564 という識別子を持つ医者または患者に関連する任意のメッセージが処理される場合に通知されます。
発行および購読メッセージ・ルーティングの実装
発行および購読オペレーションの作成
発行および購読機能を使用するには、EnsLib.PubSub.PubSubOperationOpens in a new tab クラスのインスタンスを含むプロダクションを作成する必要があります。
発行と購読の設定
プロダクションで発行と購読機能を設定する場合、基本的な手順は以下のようになります。
-
ドメインを作成します (オプション)。
-
サブスクライバのリストを作成します。
-
サブスクライバとトピックを関連付けるサブスクリプションを作成します。
[Interoperability]→[管理]→[発行と購読] ページから、[ドメインを表示]、[サブスクライバを表示]、[サブスクリプションを表示]、または [新規サブスクリプション作成] を選択することもできます。ドメイン用とサブスクライバ用のページもサブスクリプション用のものと同様ですが、それぞれには異なる [作成] コマンド、つまり [新しいサブスクライバの作成]、または [新しいドメインの作成] が用意されています。
技術的詳細
メッセージングの発行と購読では、以下の EnsLib.PubSub パッケージのクラスを使用します。
クラス名 | 目的 |
---|---|
EnsLib.PubSub.PubSubOperationOpens in a new tab | メッセージングの発行と購読のルーティングを提供するビジネス・オペレーション。 |
EnsLib.PubSub.RequestOpens in a new tab | PubSubOperation クラスへの要求をパッケージ化する要求クラス。メッセージのルーティング方法の決定に使用する、トピックと DomainName を指定します。オプションで、ルーティングするメッセージを Request に含めることもできますが、PubSubOperation がその TargetList を返すのにその情報は必要ありません。 |
EnsLib.PubSub.ResponseOpens in a new tab | PubSubOperation クラスからの応答をパッケージ化する応答クラス。TargetList という Target オブジェクトの集合が含まれます。これは、必要な送信先にメッセージをディスパッチする前に、呼び出し側のビジネス・プロセスで検証されます。 |
EnsLib.PubSub.SubscriberOpens in a new tab | 個々のサブスクライバを表す永続クラス。これらは、特定のメッセージが着信したときの通知に関連するエンティティです。Subscriber クラスには、実際のサブスクライバへのアクセスに必要な任意の情報が含まれます。 |
EnsLib.PubSub.SubscriptionOpens in a new tab | 特定の Subscriber とトピック文字列との関連付けを保存する永続クラス。 |
EnsLib.PubSub.DomainNameOpens in a new tab | PubSub ドメイン名のセットを保持する永続クラス。ドメイン名はオプションです。ドメインは、ネームスペースのように、さまざまなサブスクリプション・リストを確実に区別するために使用されます。 |
EnsLib.PubSub.UtilsOpens in a new tab | ドメイン、サブスクライバ、およびサブスクリプションを作成および削除するためのプログラム的な API を提供するユーティリティ・クラス。 |
EnsLib.PubSub.TargetOpens in a new tab | プロダクション外部の送信先にメッセージをルーティングする方法の詳細を指定する永続クラス。Target オブジェクトには Target プロパティがあり、これで現在のプロダクション内に設定されたビジネス・プロセスまたはビジネス・オペレーションを指定します。Target オブジェクトにはオプションの Address プロパティがあり、これで電子メール・アドレスなどの外部アドレスを指定できます。 |
管理ポータルを使用する代わりに、EnsLib.PubSub.UtilsOpens in a new tab クラス内のメソッドを使用して直接オブジェクトを操作できます。
EnsLib.PubSub.PubSubOperationOpens in a new tab が実際にメッセージをサブスクライバに送信するわけではありません。代わりに、特定のトピックに興味のあるサブスクライバのセットをすばやく検索するメカニズムを提供しています。ビジネス・プロセスの仕事は、PubSubOperation を呼び出してメッセージをサブスクライバにディスパッチすることです。
実行時に、受信メッセージがビジネス・プロセスに送られ、そこでそのメッセージを検証して詳細を特定します。この分析に基づいて、ビジネス・プロセスはワイルドカード文字を含まない特定のトピック文字列にメッセージを割り当てます。その後で、このトピック文字列を含む EnsLib.PubSub.RequestOpens in a new tab メッセージを作成して、それを PubSubOperation に送信します。
PubSubOperation は非常に高速な検索アルゴリズムを使用して、このトピックに関連するすべてのサブスクライバのリストを返します。PubSubOperation は、TargetList という EnsLib.PubSub.TargetOpens in a new tab オブジェクトの集合を含む EnsLib.PubSub.ResponseOpens in a new tab メッセージを返します。ビジネス・プロセスは、この集合に対してそれぞれの EnsLib.PubSub.TargetOpens in a new tab へのメッセージのディスパッチを繰り返します。