HermesEventPublisherOOB – Scoped
Die Skripteinbindung HermesEventPublisherOOB stellt Methoden zum Veröffentlichen von Nachrichten im Hermes Messaging-Servicebereit.
Wenn Sie die Standardfunktionalität dieser Skripteinbindung ändern möchten, müssen Sie die in dieser Skripteinbindung enthaltenen Methoden in der HermesEventPublisher-Skripteinbindung überschreiben. Weitere Informationen zum Überschreiben der Methoden in dieser Skripteinbindung finden Sie unter Konfigurieren Sie das Framework für Ersteller-Event-Benachrichtigungen zur Verwendung von Hermes Messaging-Service.
Diese Skripteinbindung wird im Namespace sn_api_notif_mgmt ausgeführt.
HermesEventPublisherOOB – fetchMessageHeaders(Object message)
Gibt die Nachrichtenkopfzeilen zurück, die der übergebenen Nachricht zugeordnet sind.
Sie müssen diese Methode aufrufen, bevor Sie die Nachricht über den Hermes Messaging-Serviceveröffentlichen.
Die Standardimplementierung dieser Methode legt nur den Wert des Ursprungsheaders auf TMT_SERVICENOW fest. Wenn aufgrund Ihrer Geschäftsanforderungen andere Header-Attribute von dieser Methode zurückgegeben werden sollen, müssen Sie diese Methode in der HermesEventPublisher-Skripteinbindung überschreiben und die zusätzlichen Header-Attribute angeben.
| Name | Typ | Beschreibung |
|---|---|---|
| message | Objekt | TMF-Ereignis, das im Hermes Kafka-Nachrichten-Broker veröffentlicht werden soll. Weitere Informationen zum Format dieser Nachricht finden Sie im TMF688 Event Management API-Benutzerhandbuch v4.0.0. |
| Typ | Beschreibung |
|---|---|
| Objekt | Kafka-Header, die für die übergebene Nachricht verwendet werden sollen. Beispiel: |
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
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(Object message)
Gibt den Partitionsschlüssel zurück, der der übergebenen Nachricht zugeordnet ist.
Sie müssen diese Methode aufrufen, bevor Sie die Nachricht über den Hermes Messaging-Serviceveröffentlichen.
Die Standardimplementierung für diese Methode gibt eine automatisch generierte eindeutige ID als Partitionsschlüssel zurück. Diese Art der Implementierung stellt sicher, dass Nachrichten gleichmäßig über alle Partitionen des Themas veröffentlicht werden. Wenn Sie die Behandlung von Partitionen ändern möchten, müssen Sie diese Methode in der HermesEventPublisher-Skripteinbindung überschreiben. Eine weitere mögliche Implementierung besteht darin, einen eindeutigen Partitionsschlüssel basierend auf dem Nachrichtenereignistyp oder einem anderen Attribut zurückzugeben, um die Sequenzierung von Nachrichten desselben Ereignistyps oder Attributs sicherzustellen.
| Name | Typ | Beschreibung |
|---|---|---|
| message | Objekt | Nachricht, die mit dem Hermes Kafka-Nachrichten-Broker veröffentlicht werden soll. Weitere Informationen zum Format dieser Nachricht finden Sie im TMF688 Event Management API-Benutzerhandbuch v4.0.0. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Kafka-Partitionsschlüssel, der für die übergebene Nachricht verwendet werden soll. Beispiel: 6B29FC40-CA47-1067-B31D-00DD010662DA |
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
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);
}
}
},
Das folgende Codebeispiel zeigt, wie Sie diese Methode überschreiben, um Ihre eigene Logik zur Bestimmung des Partitionsschlüssels einzubeziehen, der für die angegebene Nachricht verwendet werden soll.
// 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(Object message)
Gibt alle Kafka-Themen zurück, die der übergebenen Nachricht zugeordnet sind.
Diese Methode ist in der Basisimplementierung nicht implementiert, sie gibt nur eine statische sys_id zurück. Sie müssen diese Methode in der HermesEventPublisher-Skripteinbindung überschreiben und Logik bereitstellen, die bestimmt, an welches Kafka-Thema oder welche Kafka-Themen die übergebene Nachricht gesendet werden soll.
Weitere Informationen zur Implementierung dieser Methode finden Sie unter Konfigurieren Sie das Framework für Ersteller-Event-Benachrichtigungen zur Verwendung von Hermes Messaging-Service.
| Name | Typ | Beschreibung |
|---|---|---|
| message | Objekt | TMF-Nachricht, die im Hermes Kafka-Nachrichten-Broker veröffentlicht werden soll. Weitere Informationen zum Format dieser Nachricht finden Sie im TMF688 Event Management API-Benutzerhandbuch v4.0.0. |
| Typ | Beschreibung |
|---|---|
| Array | Liste der sys_ids der Kafka-Themen, an die die Nachricht gesendet werden soll. Befindet sich in der Tabelle „Kafka-Thema“ [cmdb_ci_appl_kafka_topic]. Beispiel: |
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
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);
}
}
},
Das folgende Codebeispiel zeigt, wie diese Methode überschrieben wird, um für jede übergebene Nachricht dieselbe sys_id des Themendatensatzes zurückzugeben.
// 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 Codebeispiel zeigt, wie diese Methode überschrieben wird, um Themen zu identifizieren, an die basierend auf dem Event-Typ in der Nachricht eine 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
},
HermesEventPublisherOOB – veröffentlichenEventToHermesKafka(Object tmfEventPayload)
Veröffentlicht die übergebene TMF688-konforme Nutzlast mit Hermes Messaging-Service.
Dies ist eine übergeordnete Methode, die andere Methoden aufruft, um das Event zu veröffentlichen. Es ist unwahrscheinlich, dass Sie diese Methode überschreiben müssen, es sei denn, Sie möchten den Kafka-Veröffentlichungsmechanismus ändern, z. B. Flow Designer anstelle der ProducerV2 -API verwenden.
| Name | Typ | Beschreibung |
|---|---|---|
| tmfEventPayload | Objekt | TMF688-konforme Event-Nutzlast. Eine Beschreibung des Formats dieser Event-Nutzlast finden Sie im TMF688 Event Management API-Benutzerhandbuch. |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
publishMessageToHermesKafka: function(tmfEventPayload) {
new HermesEventPublisher().publishEventToHermesKafka(tmfEventPayload);
},