Configurez le cadre de travail de notification d’événement du producteur pour utiliser l' Service de messagerie Hermes

  • Rversion finale: Xanadu
  • Mis à jour 1 août 2024
  • 3 minutes de lecture
  • Si vous utilisez le Service de messagerie Hermes dans votre instance, vous devez configurer le cadre de notification d’événement du producteur pour le bus de messages Kafka.

    Avant de commencer

    Rôle requis : administrateur

    Le Service de messagerie Hermes doit être activé. Pour plus de détails, voir Hermes Messaging Service activation.

    L’extrait de code suivant présente les méthodes HermesEventPublisher qui doivent être appelées pour configurer les éléments nécessaires à l’envoi d’un message à une rubrique à l’aide de l’extension Service de messagerie Hermes . L’API ProducerV2 est ensuite appelée pour envoyer le message.
    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);
        }
      }
    },

    Procédure

    1. Configurez une connexion sécurisée au Service de messagerie Hermes fichier .
    2. Remplacez la fonctionnalité par défaut dans la HermesEventPublisherOOB : fetchTopicsForMessage(message d’objet) méthode par votre logique de sélecteur de rubrique personnalisée lors de la publication d’un message dans le Service de messagerie Hermes .
      Dans la méthode HermesEventPublisher - fetchTopicsForMessage(), vous devez fournir une logique qui détermine à quelle(s) rubrique(s) Kafka envoyer un message spécifié. Vous renvoyez ensuite les sys_ids de ces enregistrements de rubriques dans un tableau.

      Vous pouvez sélectionner une rubrique en fonction d’un attribut dans la charge utile du message ou renvoyer la même rubrique pour chaque message si votre implémentation n’utilise qu’une seule rubrique.

      L’exemple suivant montre comment renvoyer le même sys_id d’enregistrement de rubrique pour chaque message transmis.
      // 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'];
      },
      L’exemple suivant montre comment identifier les rubriques auxquelles envoyer un message en fonction du type d’événement contenu dans le message.
      // 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. Remplacez la fonctionnalité par défaut de la HermesEventPublisherOOB : fetchPartionKey(message d’objet) méthode par votre logique personnalisée pour renvoyer la clé de partition à utiliser lors de la publication d’un message dans le Service de messagerie Hermes fichier .
      La liste suivante répertorie certains types possibles de clés de partition à renvoyer et leurs avantages associés :
      • ID unique généré automatiquement. Ce type de clé de partition garantit que les messages sont publiés uniformément entre les partitions de rubriques. Il s’agit de l’implémentation par défaut.
      • Clé unique basée sur le type d’événement du message (ou tout autre attribut de message). Ce type de clé de partition assure le séquençage des messages de ce type d’événement (ou d’un autre attribut de message).
      • La même clé de partition, ce qui entraîne l’envoi de messages sur la même partition. Ce type de clé de partition assure un séquençage strict des messages au niveau du groupe de consommateurs Kafka.
      L’exemple suivant montre comment renvoyer un ID aléatoire pour chaque clé de partition.
      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(); 
      },
      L’exemple suivant montre comment renvoyer une clé de partition en fonction du type d’événement dans le message.
      // 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. Remplacez la fonctionnalité par défaut de la HermesEventPublisherOOB : fetchMessageHeaders(message d’objet) méthode par votre logique personnalisée pour extraire l’en-tête d’un message spécifié avant de publier le message via le Service de messagerie Hermes fichier .
      Consultez la documentation Apache Kafka pour plus d’informations sur ces en-têtes.
      L’exemple suivant montre comment renvoyer des en-têtes en fonction du type d’événement dans le message.
      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;
      },