HermesEventPublisherOOB - スコープ指定
HermesEventPublisherOOB スクリプトインクルードは、Hermes メッセージングサービスメッセージを に公開するメソッドを提供します。
このスクリプトインクルードのデフォルトの機能を変更する場合は、 HermesEventPublisher スクリプトインクルードでこのスクリプトインクルードに含まれるメソッドを上書きする必要があります。このスクリプトインクルードのメソッドを上書きする方法の詳細については、を参照してください を使用するためのプロデューサーイベント通知フレームワークの構成 Hermes メッセージングサービス。
このスクリプト インクルードは sn_api_notif_mgmt 名前空間で実行されます。
HermesEventPublisherOOB - fetchMessageHeaders(オブジェクト message)
渡されたメッセージに関連付けられているメッセージヘッダーを返します。
を使用してメッセージを Hermes メッセージングサービス公開する前に、このメソッドを呼び出す必要があります。
このメソッドの既定の実装では、 起点 ヘッダーの値のみが TMT_SERVICENOW に設定されます。ビジネス要件に基づいてこのメソッドで他のヘッダー属性を返す必要がある場合は、 HermesEventPublisher スクリプトインクルードでこのメソッドを上書きし、追加のヘッダー属性を指定する必要があります。
| 名前 | タイプ | 説明 |
|---|---|---|
| message | オブジェクト | Hermes Kafka メッセージブローカーに公開する TMF イベント。このメッセージの形式について詳しくは、 TMF688 イベント管理 API ユーザー・ガイド v4.0.0 を参照してください。 |
| タイプ | 説明 |
|---|---|
| オブジェクト | 渡されたメッセージに使用する Kafka ヘッダー。 たとえば、次のようになります。 |
次のコード例は、このメソッドを呼び出す方法を示しています。
publishMessageThroughProducerV2API: function(message) {
if (gs.nil(message)) return;
var comptableTopicSysIds = this.fetchTopicsForMessage(message);
if (gs.nil(comptableTopicSysIds)) return;
for (var i = 0; i < comptableTopicSysIds.length; i++) {
var partitionKey = this.fetchPartionKey(message);
var headers = this.fetchMessageHeaders(message)
try {
var producer = new sn_ih_kafka.ProducerV2();
producer.send(comptableTopicSysIds[i], partitionKey, JSON.stringify(message), false, headers);
} catch (ex) {
this._logger.logErr("Publishing message to Hermes Kafka Failed, error is: " + ex);
}
}
},
HermesEventPublisherOOB - fetchPartionKey(オブジェクト message)
渡されたメッセージに関連付けられているパーティションキーを返します。
を使用してメッセージを Hermes メッセージングサービス公開する前に、このメソッドを呼び出す必要があります。
このメソッドの既定の実装では、自動生成された一意の ID がパーティション キーとして返されます。このタイプの実装により、トピックのすべてのパーティションでメッセージが均等に発行されます。パーティションの処理を変更する場合は、 HermesEventPublisher スクリプトインクルードでこのメソッドを上書きする必要があります。別の可能な実装は、メッセージ イベントの種類またはその他の属性に基づいて一意のパーティション キーを返して、同じイベントの種類または属性のメッセージの順序付けを保証することです。
| 名前 | タイプ | 説明 |
|---|---|---|
| message | オブジェクト | Hermes Kafka メッセージブローカーを使用して公開するメッセージ。このメッセージの形式について詳しくは、 TMF688 イベント管理 API ユーザー・ガイド v4.0.0 を参照してください。 |
| タイプ | 説明 |
|---|---|
| 文字列 | 渡されるメッセージに使用する Kafka パーティションキーです。 例:6B29FC40-CA47-1067-B31D-00DD010662DA |
次のコード例は、このメソッドを呼び出す方法を示しています。
publishMessageThroughProducerV2API: function(message) {
if (gs.nil(message)) return;
var comptableTopicSysIds = this.fetchTopicsForMessage(message);
if (gs.nil(comptableTopicSysIds)) return;
for (var i = 0; i < comptableTopicSysIds.length; i++) {
var partitionKey = this.fetchPartionKey(message);
var headers = this.fetchMessageHeaders(message)
try {
var producer = new sn_ih_kafka.ProducerV2();
producer.send(comptableTopicSysIds[i], partitionKey, JSON.stringify(message), false, headers);
} catch (ex) {
this._logger.logErr("Publishing message to Hermes Kafka Failed, error is: " + ex);
}
}
},
次のコード例は、このメソッドをオーバーライドして、指定したメッセージに使用するパーティション キーを決定するための独自のロジックを含める方法を示しています。
// Existing implementation for fetching a partition key which is an auto-generated unique ID.
fetchPartionKey: function(message) {
// Implement it for custom partition key
// Random message key ensures better distribution of messages across partitions.
// Same message key ensures that messages always goes to the same partition. This ensures a strict sequencing
// of messages at the Kafka consumer group level.
return gs.generateGUID();
},
// Implementation where the partition key is determined based on the event type.
fetchPartionKey: function(message) {
var eventType = message.eventType;
var partionKey = fetchPartionKeyForMessage(eventType);
return partionKey;
},
HermesEventPublisherOOB - fetchTopicsForMessage(オブジェクト message)
渡されたメッセージに関連付けられているすべての Kafka トピックを返します。
このメソッドは基本実装には実装されておらず、静的sys_idのみを返します。HermesEventPublisher スクリプトインクルードでこのメソッドを上書きし、渡すメッセージの送信先の Kafka トピックを決定するロジックを提供する必要があります。
このメソッドの実装方法の詳細については、を参照してください を使用するためのプロデューサーイベント通知フレームワークの構成 Hermes メッセージングサービス。
| 名前 | タイプ | 説明 |
|---|---|---|
| message | オブジェクト | Hermes Kafka メッセージブローカーに公開する TMF メッセージ。このメッセージの形式について詳しくは、 TMF688 イベント管理 API ユーザー・ガイド v4.0.0 を参照してください。 |
| タイプ | 説明 |
|---|---|
| アレイ | メッセージの送信先の Kafka トピックsys_idsのリスト。Kafka トピック [cmdb_ci_appl_kafka_topic] テーブルにあります。 たとえば、次のようになります。 |
次のコード例は、このメソッドを呼び出す方法を示しています。
publishMessageThroughProducerV2API: function(message) {
if (gs.nil(message)) return;
var comptableTopicSysIds = this.fetchTopicsForMessage(message);
if (gs.nil(comptableTopicSysIds)) return;
for (var i = 0; i < comptableTopicSysIds.length; i++) {
var partitionKey = this.fetchPartionKey(message);
var headers = this.fetchMessageHeaders(message)
try {
var producer = new sn_ih_kafka.ProducerV2();
producer.send(comptableTopicSysIds[i], partitionKey, JSON.stringify(message), false, headers);
} catch (ex) {
this._logger.logErr("Publishing message to Hermes Kafka Failed, error is: " + ex);
}
}
},
次のコード例は、このメソッドをオーバーライドして、渡された各メッセージに対して同じトピックレコードsys_idを返す方法を示しています。
// Return the same topic for all messages if your
// implementation only supports one kind of topic
fetchTopicsForMessage: function(message) {
// Return the same sys_id for all passed messages which
// implies that all of the messages are published to the same topic.
return ['91564fc087f8351063151f473cbb35f8'];
},
次のコード例は、このメソッドをオーバーライドして、メッセージのイベントタイプに基づいてメッセージの送信先のトピックを識別する方法を示しています。
// Fetch the topic based on the message content.
// This could be based on the message domain type or the message event type.
fetchTopicsForMessage: function(message) {
// Implement to return topic based on a message content
// Implementor may decide a topic based on 'eventType' or any other attribute.
var eventType = message.eventType;
var topicSysIdsArr = this.fetchTopicBasedOnEventType(eventType);
return topicSysIdsArr
},
HermesEventPublisherOOB - publishEventToHermesKafka(オブジェクト tmfEventPayload)
渡された TMF688 準拠ペイロードを次 Hermes メッセージングサービスを使用して公開します。
これは、他のメソッドを呼び出してイベントを発行する親メソッドです。ProducerV2 API を使用する代わりに使用するフローデザイナーなど、Kafka 公開メカニズムを変更する場合を除き、このメソッドをオーバーライドする必要はほとんどありません。
| 名前 | タイプ | 説明 |
|---|---|---|
| tmfEventPayload | オブジェクト | TMF688 準拠のイベントペイロード。このイベント・ペイロードの形式の説明については、 『TMF688 Event Management API ユーザー・ガイド』を参照してください。 |
| タイプ | 説明 |
|---|---|
| なし |
次のコード例は、このメソッドを呼び出す方法を示しています。
publishMessageToHermesKafka: function(tmfEventPayload) {
new HermesEventPublisher().publishEventToHermesKafka(tmfEventPayload);
},