Konfigurieren Sie das Benachrichtigungs-Framework für Ersteller-Ereignisse für die Verwendung von Hermes Messaging-Service

  • Freigeben Version: Yokohama
  • Aktualisiert 30. Januar 2025
  • 3 Minuten Lesedauer
  • Wenn Sie verwenden Hermes Messaging-ServiceIn Ihrer Instanz müssen Sie das Benachrichtigungs-Framework für Ersteller-Ereignisse für den Kafka-Nachrichtenbus konfigurieren.

    Vorbereitungen

    Erforderliche Rolle: Administrator

    Die Hermes Messaging-ServiceMuss aktiviert sein. Details finden Sie unter Hermes Messaging Service activation.

    Das folgende Codefragment zeigt an HermesEventPublisher Methoden, die aufgerufen werden müssen, um die Elemente zu konfigurieren, die zum Senden einer Nachricht an ein Thema mit erforderlich sind Hermes Messaging-Service. Die ProduktV2 Die API wird dann aufgerufen, um die Nachricht zu senden.
    publishEventToHermesKafka: function(tmfEventPayload) {
      if (gs.nil(tmfEventPayload)) {
        return;
      }
      this.publishMessageThroughProducerV2API(tmfEventPayload)
    
    },
    
    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);
        }
      }
    },

    Prozedur

    1. Richten Sie eine sichere Verbindung mit ein Hermes Messaging-Service.
    2. Überschreiben Sie die Standardfunktionalität in HermesEventPublisherOOB – fetchTopicsForMessage(Objektnachricht)Methode mit Ihrer anwenderdefinierten Themenauswahllogik beim Veröffentlichen einer Nachricht in Hermes Messaging-Service.
      In HermesEventPublisher – fetchTopicsForMessage() Methode müssen Sie eine Logik angeben, die bestimmt, an welche Kafka-Themen eine bestimmte Nachricht gesendet werden soll. Sie geben dann die sys_IDs dieser Themendatensätze in einem Array zurück.

      Sie können ein Thema basierend auf einem Attribut in der Nachrichtennutzlast auswählen oder für jede Nachricht dasselbe Thema zurückgeben, wenn Ihre Implementierung nur ein einzelnes Thema verwendet.

      Das folgende Beispiel zeigt, wie dieselbe sys_ID des Themendatensatzes für jede übergebene Nachricht zurückgegeben wird.
      // 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'];
      },
      Das folgende Beispiel zeigt, wie Themen identifiziert werden, an die eine Nachricht basierend auf dem Ereignistyp in der Nachricht gesendet werden soll.
      // 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
      
      },
    3. Überschreiben Sie die Standardfunktionalität in HermesEventPublisherOOB – fetchPartionKey(Objektnachricht)Methode mit Ihrer anwenderdefinierten Logik, um den Partitionsschlüssel zurückzugeben, der beim Veröffentlichen einer Nachricht in verwendet werden soll Hermes Messaging-Service.
      Die folgende Liste enthält einige mögliche Arten von zurückzugebenden Partitionsschlüsseln und die zugehörigen Vorteile:
      • Eine automatisch generierte eindeutige ID. Dieser Typ von Partitionsschlüssel stellt sicher, dass Nachrichten gleichmäßig über Themenpartitionen hinweg veröffentlicht werden. Dies ist die Standardimplementierung.
      • Ein eindeutiger Schlüssel basierend auf dem Nachrichtenereignistyp (oder einem anderen Nachrichtenattribut). Dieser Typ von Partitionsschlüssel stellt die Sequenzierung von Nachrichten dieses Ereignistyps (oder eines anderen Nachrichtenattributs) sicher.
      • Derselbe Partitionsschlüssel, der bewirkt, dass Nachrichten auf derselben Partition gesendet werden. Dieser Typ von Partitionsschlüssel stellt eine strikte Sequenzierung von Nachrichten auf Kafka-Verbrauchergruppenebene sicher.
      Das folgende Beispiel zeigt, wie für jeden Partitionsschlüssel eine zufällige ID zurückgegeben wird.
      fetchPartionKey: function(message) { 
      // Implement it for custom partition key 
      // Random message keys ensure better distribution of message across partitions. 
      // Same message keys ensure that message always goes to the same partition.   
      // This ensures strict sequencing of messages at the Kafka consumer group level. 
      return gs.generateGUID(); 
      },
      Das folgende Beispiel zeigt, wie ein Partitionsschlüssel basierend auf dem Ereignistyp in der Nachricht zurückgegeben wird.
      // Implementation where the partition key is decided based on the event type.
      fetchPartionKey: function(message) { 
      
      var eventType = message.eventType;
      var partionKey = fetchPartionKeyForMessage(eventType);
      return partionKey;
      },
    4. Überschreiben Sie die Standardfunktionalität in HermesEventPublisherOOB – fetchMessageHeaders (Objektnachricht)Methode mit Ihrer anwenderdefinierten Logik zum Abrufen des Headers für eine angegebene Nachricht, bevor die Nachricht über veröffentlicht wird Hermes Messaging-Service.
      Weitere Informationen finden Sie unter Apache Kafka Dokumentation für weitere Informationen zu diesen Headern.
      Das folgende Beispiel zeigt, wie Header basierend auf dem Ereignistyp in der Nachricht zurückgegeben werden.
      fetchMessageHeaders: function(message) { 
      // Returned headers are based on the event type passed in the message object. 
        var eventType = message.eventType;
        var headerObject = fetchHeadersBasedOnEventType(eventType);
        return headerObject;
      },