HermesEventPublisherOOB: Bereichsbezogen
Die HermesEventPublisherOOB-Skripteinbindung bietet Methoden zum Veröffentlichen von Nachrichten im Hermes Messaging-Service.
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 Benachrichtigungen über Produzenten-Events für die Verwendung von Hermes Messaging-Service.
Diese Skripteinbindung wird im Namespace sn_api_notif_mgmt ausgeführt.
HermesEventPublisherOOB – fetchMessageHeaders(Objektnachricht)
Gibt die Nachrichtenheader zurück, die der übergebenen Nachricht zugeordnet sind.
Sie müssen diese Methode aufrufen, bevor Sie die Nachricht über Hermes Messaging-Serviceveröffentlichen.
Die standardmäßige Implementierung dieser Methode legt nur den Wert des Ursprungs -Headers auf TMT_SERVICENOW fest. Wenn basierend auf Ihren Geschäftsanforderungen andere Header-Attribute von dieser Methode zurückgegeben werden sollen, müssen Sie diese Methode in der Skripteinbindung „HermesEventPublisher“ überschreiben und die zusätzlichen Header-Attribute angeben.
| Name | Typ | Beschreibung |
|---|---|---|
| message | Objekt | TMF-Ereignis zur Veröffentlichung im Hermes-Kafka-Nachrichten-Broker. Weitere Informationen zum Format dieser Nachricht finden Sie im TMF688 Ereignismanagement-API-Benutzerhandbuch v4.0.0. |
| Typ | Beschreibung |
|---|---|
| Objekt | Kafka-Header für die übergebene Nachricht. 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(Objektnachricht)
Gibt den Partitionsschlüssel zurück, der der übergebenen Nachricht zugeordnet ist.
Sie müssen diese Methode aufrufen, bevor Sie die Nachricht über 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 in allen Partitionen des Themas gleichmäßig veröffentlicht werden. Wenn Sie die Behandlung von Partitionen ändern möchten, müssen Sie diese Methode in der Skripteinbindung HermesEventPublisher überschreiben. Eine andere mögliche Implementierung besteht in der Rückgabe eines eindeutigen Partitionsschlüssels basierend auf dem Nachrichtenereignistyp oder einem anderen Attribut, 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 Ereignismanagement-API-Benutzerhandbuch v4.0.0. |
| Typ | Beschreibung |
|---|---|
| Zeichenfolge | Kafka-Partitionsschlüssel für die übergebene Nachricht. 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 für die angegebene Nachricht zu verwendenden Partitionsschlüssels einzubeziehen.
// 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(Objektnachricht)
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 eine Logik bereitstellen, die bestimmt, an welche Kafka-Themen die übergebene Nachricht gesendet wird.
Weitere Informationen zur Implementierung dieser Methode finden Sie unter Konfigurieren Sie das Framework für Benachrichtigungen über Produzenten-Events für die Verwendung von Hermes Messaging-Service.
| Name | Typ | Beschreibung |
|---|---|---|
| message | Objekt | TMF-Nachricht, die im Hermes-Kafka-Nachrichtenbroker veröffentlicht werden soll. Weitere Informationen zum Format dieser Nachricht finden Sie im TMF688 Ereignismanagement-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 Sie diese Methode überschreiben, um für jede übergebene Nachricht dieselbe Themendatensatz-sys_id 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 Sie diese Methode überschreiben, um Themen zu identifizieren, an die basierend auf dem Ereignistyp 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 Ereignis 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. durch Verwendung von Workflow-Studio anstelle der ProduzentenV2 -API.
| Name | Typ | Beschreibung |
|---|---|---|
| tmfEventPayload | Objekt | TMF688-konforme Ereignisnutzlast Eine Beschreibung des Formats dieser Ereignisnutzlast finden Sie im TMF688 Ereignismanagement-API-Benutzerhandbuch. |
| Typ | Beschreibung |
|---|---|
| Keine |
Das folgende Codebeispiel zeigt, wie diese Methode aufgerufen wird.
publishMessageToHermesKafka: function(tmfEventPayload) {
new HermesEventPublisher().publishEventToHermesKafka(tmfEventPayload);
},