Se você estiver usando Serviço de envio de mensagens Hermes Em sua instância, você deve configurar a Estrutura de notificação de evento do produtor para o barramento de mensagens Kafka.
Antes de Iniciar
Função necessária: administrador
. Serviço de envio de mensagens Hermes deve ser ativado. Para obter detalhes, consulte Activating the Hermes Messaging Service.
O snippet de código a seguir mostra o.
HermesEventPublisher métodos que devem ser chamados para configurar os elementos necessários para enviar uma mensagem para um tópico usando
Serviço de envio de mensagens Hermes. .
ProdutorV2 A API é chamada para enviar a mensagem.
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);
}
}
},
Procedimento
-
Configure uma conexão segura com o Serviço de envio de mensagens Hermes.
-
Substitua a funcionalidade padrão no HermesEventPubliherOOB - fetchTopicsForMessage(mensagem do objeto) método com sua lógica de seletor de tópicos personalizada ao publicar uma mensagem para Serviço de envio de mensagens Hermes.
Em
HermesEventPublisher - fetchTopicsForMessage() , você deve fornecer uma lógica que determina para qual tópico ou tópicos do Kafka enviar uma mensagem especificada. Em seguida, você retorna os sys_ids desses registros de tópico em uma matriz.
Você pode selecionar um tópico com base em um atributo na carga da mensagem ou retornar o mesmo tópico para cada mensagem se sua implementação utilizar apenas um único tópico.
O exemplo a seguir mostra como 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 a seguir mostra como identificar tópicos para enviar uma mensagem 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
},
-
Substitua a funcionalidade padrão no HermesEventPubliherOOB - fetchPartionKey(mensagem do objeto) método com sua lógica personalizada para retornar a chave de partição a ser usada ao publicar uma mensagem para Serviço de envio de mensagens Hermes.
A lista a seguir inclui alguns tipos possíveis de chaves de partição a serem retornadas e seus benefícios associados:
- Um ID exclusivo gerado automaticamente. Este tipo de chave de partição garante que as mensagens sejam publicadas uniformemente nas partições de tópico. Esta é a implementação padrão.
- Uma chave exclusiva baseada no tipo de evento de mensagem (ou qualquer outro atributo de mensagem). Esse tipo de chave de partição garante o sequenciamento de mensagens desse tipo de evento (ou outro atributo de mensagem).
- A mesma chave de partição, que faz com que as mensagens sejam enviadas na mesma partição. Este tipo de chave de partição garante o sequenciamento estrito de mensagens no nível do grupo de consumidores Kafka.
O exemplo a seguir mostra como retornar um ID aleatório para cada chave de partição.
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();
},
O exemplo a seguir mostra como retornar uma chave de partição com base no tipo de evento na mensagem.
// 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;
},
-
Substitua a funcionalidade padrão no HermesEventPubliherOOB - fetchMessageHeaders(mensagem do objeto) método com sua lógica personalizada para buscar o cabeçalho de uma mensagem especificada antes de publicar a mensagem por meio do Serviço de envio de mensagens Hermes.
Consulte
Apache Kafka documentação para obter mais informações sobre esses cabeçalhos.
O exemplo a seguir mostra como retornar cabeçalhos com base no tipo de evento na mensagem.
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;
},