Wenn Sie Hermes Messaging-Service in Ihrer Instanz verwenden, müssen Sie das Producer Event Notification Framework für den Kafka-Nachrichtenbus konfigurieren.
Vorbereitungen
Erforderliche Rolle: admin
Hermes Messaging-Service muss aktiviert sein. Details finden Sie unter Hermes Messaging Service activation.
Das folgende Code-Snippet zeigt die
HermesEventPublisher- Methoden, die aufgerufen werden müssen, um die Elemente zu konfigurieren, die zum Senden einer Nachricht an ein Thema mit
Hermes Messaging-Serviceerforderlich sind. Die
ProducerV2 -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
-
Richten Sie eine sichere Verbindung zu Hermes Messaging-Serviceein.
-
Überschreiben Sie die Standardfunktionalität in der Methode HermesEventPublisherOOB – fetchTopicsForMessage(Object message) mit Ihrer benutzerdefinierten Themenauswahllogik, wenn Sie eine Nachricht im Hermes Messaging-Serviceveröffentlichen.
In der Methode
HermesEventPublisher – fetchTopicsForMessage() müssen Sie Logik angeben, die bestimmt, an welches Kafka-Thema oder welche Kafka-Themen eine angegebene 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 Sie können für jede Nachricht dasselbe Thema zurückgeben, wenn Ihre Implementierung nur ein einzelnes Thema verwendet.
Das folgende Beispiel zeigt, wie für jede übergebene Nachricht dieselbe sys_id des Themendatensatzes 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 Event-Typ 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
},
-
Überschreiben Sie die Standardfunktionalität in der Methode HermesEventPublisherOOB – fetchPartionKey(Object message) mit Ihrer benutzerdefinierten Logik, um den Partitionsschlüssel zurückzugeben, der beim Veröffentlichen einer Nachricht im Hermes Messaging-Serviceverwendet werden soll.
Die folgende Liste enthält einige mögliche Typen 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 Event-Typs (oder eines anderen Nachrichtenattributs) sicher.
- Derselbe Partitionsschlüssel, der bewirkt, dass Nachrichten an dieselbe Partition gesendet werden. Dieser Typ von Partitionsschlüssel gewährleistet eine strikte Sequenzierung von Nachrichten auf Ebene der Kafka-Verbrauchergruppe.
Das folgende Beispiel zeigt, wie eine zufällige ID für jeden Partitionsschlüssel 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 Event-Typ 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;
},
-
Überschreiben Sie die Standardfunktionalität in der Methode HermesEventPublisherOOB – fetchMessageHeaders(Object message) mit Ihrer benutzerdefinierten Logik, um den Header für eine angegebene Nachricht abzurufen, bevor die Nachricht über Hermes Messaging-Serviceveröffentlicht wird.
Weitere Informationen zu diesen Headern finden Sie in der
Apache Kafka- Dokumentation.
Das folgende Beispiel zeigt, wie Header basierend auf dem Event-Typ 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;
},