HermesEventPublisherOOB - com escopo

  • Versão de lançamento: Yokohama
  • Atualizado 30 de jan. de 2025
  • 5 min. de leitura
  • A inclusão de script HermesEventPublisherOOB fornece métodos para publicar mensagens no Serviço de envio de mensagens Hermes.

    Se você quiser mudar a funcionalidade padrão desta inclusão de script, será necessário substituir os métodos contidos nesta inclusão de script na inclusão de script HermesEventPublisher. Para obter informações adicionais sobre como substituir os métodos nesta inclusão de script, consulte Configure a Estrutura de notificação de eventos do produtor para usar o Serviço de envio de mensagens Hermes.

    Esta inclusão de script é executada no namespace sn_api_notif_mgmt.

    HermesEventPublisherOOB - fetchMessageHeaders (mensagem do objeto)

    Retorna os cabeçalhos de mensagem associados à mensagem passada.

    Você deve chamar este método antes de publicar a mensagem por meio de Serviço de envio de mensagens Hermes.

    A implementação padrão deste método define somente o valor do cabeçalho de origem como TMT_SERVICENOW. Se outros atributos de cabeçalho devem ser passados de volta por este método com base em seus requisitos de negócio, você deve substituir este método na inclusão de script HermesEventPublisher e fornecer os atributos de cabeçalho adicionais.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    mensagem Objeto Evento de TMF a ser publicado no agente de mensagens Hermes Kafka. Para obter detalhes sobre o formato desta mensagem, consulte o Guia do usuário da API de gestão de eventos TMF688 v4.0.0.
    Tabela 2. Retornos
    Tipo Descrição
    Objeto Cabeçalhos do Kafka a serem usados para a mensagem passada.
    Por exemplo:
    {
      origin: 'TMT_SERVICENOW'
    }

    O exemplo de código a seguir mostra como chamar este método.

    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 (mensagem do objeto)

    Retorna a chave de partição associada à mensagem passada.

    Você deve chamar este método antes de publicar a mensagem por meio de Serviço de envio de mensagens Hermes.

    A implementação padrão para este método retorna um ID exclusivo gerado automaticamente como a chave de partição. Este tipo de implementação garante que as mensagens sejam publicadas uniformemente em todas as partições do tópico. Se você quiser modificar o processamento de partições, deverá substituir este método na inclusão de script HermesEventPublisher. Outra implementação possível é retornar uma chave de partição exclusiva com base no tipo de evento de mensagem ou outro atributo, para garantir o sequenciamento de mensagens do mesmo tipo de evento ou atributo.

    Tabela 3. Parâmetros
    Nome Tipo Descrição
    mensagem Objeto Mensagem a ser publicada usando o agente de mensagens Hermes Kafka. Para obter detalhes sobre o formato desta mensagem, consulte o Guia do usuário da API de gestão de eventos TMF688 v4.0.0.
    Tabela 4. Retornos
    Tipo Descrição
    Cadeia de caracteres Chave de partição do Kafka a ser usada para a mensagem passada.

    Por exemplo: 6B29FC40-CA47-1067-B31D-00DD010662DA

    O exemplo de código a seguir mostra como chamar este método.

    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);
        }
      }
    },

    O exemplo de código a seguir mostra como substituir este método para incluir sua própria lógica para determinar a chave de partição a ser usada para a mensagem especificada.

    // 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 (mensagem do objeto)

    Retorna todos os tópicos do Kafka associados à mensagem passada.

    Este método não está implementado na implementação base, ele retorna somente um sys_id estático. Você deve substituir este método na inclusão de script HermesEventPublisher e fornecer a lógica que determina para qual tópico ou tópicos do Kafka a mensagem passada será enviada.

    Para obter informações adicionais sobre como implementar este método, consulte Configure a Estrutura de notificação de eventos do produtor para usar o Serviço de envio de mensagens Hermes.

    Tabela 5. Parâmetros
    Nome Tipo Descrição
    mensagem Objeto Mensagem TMF a ser publicada no agente de mensagens Hermes Kafka. Para obter detalhes sobre o formato desta mensagem, consulte o Guia do usuário da API de gestão de eventos TMF688 v4.0.0.
    Tabela 6. Retornos
    Tipo Descrição
    Matriz Lista de sys_ids dos tópicos Kafka para os quais a mensagem deve ser enviada.
    Por exemplo:
    [
      "9d385017c611228701d22104cc95c371",
      "8438201ec613628421e13105d396d421"
    ]

    Tabela: tópico do Kafka [cmdb_ci_appl_kafka_topic]

    O exemplo de código a seguir mostra como chamar este método.

    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);
        }
      }
    },

    O exemplo de código a seguir mostra como substituir este método para retornar o mesmo sys_id de registro de tópico para cada mensagem passada.

    // 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'];
    },

    O exemplo de código a seguir mostra como substituir este método para identificar tópicos para os quais uma mensagem será enviada com base no tipo de evento na mensagem.

    // 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 – publicarEventToHermesKafka(Object tmfEventPayload)

    Publica a carga aprovada em conformidade com o TMF688 usando o Serviço de envio de mensagens Hermes.

    Este é um método primário que chama outros métodos para publicar o evento. É improvável que você precise substituir este método, a menos que queira mudar o mecanismo de publicação do Kafka, como usar Workflow Studio em vez de usar a API ProducerV2.

    Tabela 7. Parâmetros
    Nome Tipo Descrição
    tmfEventPayload Objeto Carga de evento compatível com TMF688. Para obter uma descrição do formato desta carga de evento, consulte o Guia do usuário da API de gestão de eventos TMF688.
    Tabela 8. Retornos
    Tipo Descrição
    Nenhum(a)

    O exemplo de código a seguir mostra como chamar este método.

    publishMessageToHermesKafka: function(tmfEventPayload) {
      new HermesEventPublisher().publishEventToHermesKafka(tmfEventPayload);
    },