HermesEventPublisherOOB - スコープ指定

  • リリースバージョン: Zurich
  • 更新日 2025年07月31日
  • 所要時間:11分
  • HermesEventPublisherOOB スクリプトインクルードは、Hermes メッセージングサービスにメッセージを公開するためのメソッドを提供します。

    このスクリプトインクルードのデフォルト機能を変更する場合は、このスクリプトインクルードに含まれるメソッドを HermesEventPublisher スクリプトインクルードで上書きする必要があります。このスクリプトインクルードのメソッドを上書きする方法の詳細については、「 を使用するようにプロデューサーイベント通知フレームワークを構成する Hermes メッセージングサービス」を参照してください。

    このスクリプトインクルードは 、sn_api_notif_mgmt 名前空間で実行されます。

    HermesEventPublisherOOB:fetchMessageHeaders (オブジェクトメッセージ)

    渡されたメッセージに関連付けられたメッセージヘッダーを返します。

    Hermes メッセージングサービスを介してメッセージを公開する前に、このメソッドを呼び出す必要があります。

    このメソッドのデフォルト実装では、 オリジン ヘッダー値を TMT_SERVICENOW に設定するだけです。ビジネス要件に基づいてこのメソッドによって他のヘッダー属性を返す必要がある場合は、 HermesEventPublisher スクリプトインクルードでこのメソッドをオーバーライドし、追加のヘッダー属性を指定する必要があります。

    表 : 1. パラメーター
    名前 タイプ 説明
    message オブジェクト Hermes Kafka メッセージブローカーに公開する TMF イベント。このメッセージの形式の詳細については、「 TMF688 イベント管理 API ユーザーガイド v4.0.0」を参照してください。
    表 : 2. 戻り値
    タイプ 説明
    オブジェクト 渡されたメッセージに使用する Kafka ヘッダー。
    たとえば、次のようになります。
    {
      origin: 'TMT_SERVICENOW'
    }

    次のコード例は、このメソッドを呼び出す方法を示しています。

    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(オブジェクトメッセージ)

    渡されたメッセージに関連付けられたパーティションキーを返します。

    Hermes メッセージングサービスを介してメッセージを公開する前に、このメソッドを呼び出す必要があります。

    このメソッドのデフォルト実装では、自動生成された一意の ID がパーティションキーとして返されます。このタイプの実装により、トピックのすべてのパーティションにメッセージが均等に公開されます。パーティションの処理を変更する場合は、 HermesEventPublisher スクリプトインクルードでこのメソッドを上書きする必要があります。別の実装方法として、メッセージ・イベント・タイプまたはその他の属性に基づいて一意のパーティション・キーを戻し、同じイベント・タイプまたは属性のメッセージの順序付けを保証することもできます。

    表 : 3. パラメーター
    名前 タイプ 説明
    message オブジェクト Hermes Kafka メッセージブローカーを使用して公開するメッセージ。このメッセージの形式の詳細については、「 TMF688 イベント管理 API ユーザーガイド v4.0.0」を参照してください。
    表 : 4. 戻り値
    タイプ 説明
    文字列 渡されたメッセージに使用する 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 (オブジェクトメッセージ)

    渡されたメッセージに関連付けられているすべての Kafka トピックを返します。

    このメソッドは基本実装には実装されておらず、静的sys_idのみを返します。HermesEventPublisher スクリプトインクルードでこのメソッドを上書きし、渡されたメッセージの送信先の Kafka トピックを決定するロジックを指定する必要があります。

    このメソッドを実装する方法の詳細については、「 を使用するようにプロデューサーイベント通知フレームワークを構成する Hermes メッセージングサービス」を参照してください。

    表 : 5. パラメーター
    名前 タイプ 説明
    message オブジェクト Hermes Kafka メッセージブローカーに公開する TMF メッセージ。このメッセージの形式の詳細については、「 TMF688 イベント管理 API ユーザーガイド v4.0.0」を参照してください。
    表 : 6. 戻り値
    タイプ 説明
    アレイ メッセージの送信先となる Kafka トピックのsys_idsのリスト。
    たとえば、次のようになります。
    [
      "9d385017c611228701d22104cc95c371",
      "8438201ec613628421e13105d396d421"
    ]

    テーブル: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)

    Hermes メッセージングサービスを使用して、合格した TMF688 準拠のペイロードを公開します。

    これは、他のメソッドを呼び出してイベントを公開する親メソッドです。ProducerV2 API を使用する代わりに ワークフロースタジオ を使用するなど、Kafka 公開メカニズムを変更する場合を除き、このメソッドをオーバーライドする必要はほとんどありません。

    表 : 7. パラメーター
    名前 タイプ 説明
    TMFEVENT ペイロード オブジェクト TMF688 準拠のイベントペイロード。このイベントペイロードの形式の説明については、『 TMF688 Event Management API User Guide』を参照してください。
    表 : 8. 戻り値
    タイプ 説明
    なし

    次のコード例は、このメソッドを呼び出す方法を示しています。

    publishMessageToHermesKafka: function(tmfEventPayload) {
      new HermesEventPublisher().publishEventToHermesKafka(tmfEventPayload);
    },