Entender a arquitetura de software orientada a eventos

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:
  • Listar os componentes da arquitetura de software baseada em eventos.
  • Explicar os benefícios de uma arquitetura de software orientada a eventos.
  • Descrever casos de uso para o recurso Eventos de plataforma.
  • Descrever as características de um evento de plataforma.

Antes de começar esse módulo

Sabemos que você está ansioso para começar! Mas antes de começar a trabalhar neste módulo, você deve estar familiarizado com alguns conceitos para poder concluí-lo. 

Este módulo mostra como você pode publicar eventos de plataforma usando o Apex, API REST, fluxos e processos. Além disso, você pode se inscrever em eventos de plataforma usando acionadores do Apex, fluxos, processos, um componente do Lightning e uma ferramenta baseada em CometD. Para poder entender este módulo, você deve estar familiarizado com, pelo menos, uma dessas tecnologias. Para poder realizar o desafio prático neste módulo, você deve estar familiarizado com os acionadores do Apex. Aqui está uma lista de uma trilha e módulos que você pode usar para aprender sobre o Apex.

Além disso, estar familiarizado com os conceitos de API de streaming é útil para este módulo. Se ainda não o fez, conclua o módulo Noções básicas da API da Lightning Platform antes de trabalhar neste módulo.

Entender a arquitetura de software orientada a eventos

Seu sistema de pedidos enviou um pacote? Seus cartuchos de impressora precisam ser substituídos? Não importa sobre o que você queira ser notificado, a plataforma de sistema de mensagens empresarial do Salesforce fornece a entrega de notificações personalizadas seguras e escaláveis no Salesforce e a partir de fontes externas. Com eventos de plataforma, você pode monitorar seus sistemas e comunicar alterações a outros sistemas.

O paradigma da comunicação baseada em eventos gira em torno de um modelo editor-assinante – um remetente transmite uma mensagem que um ou mais receptores capturam. É como uma radiotransmissão – uma torre de transmissão envia um sinal de rádio e os receptores recebem o sinal se estiverem sintonizados na frequência certa.

Assim como a radiotransmissão, a comunicação baseada em eventos flui do remetente para o receptor. Os eventos são enviados independentemente de os receptores estarem ouvindo ou não, e os receptores não confirmam quando recebem um evento. A comunicação baseada em eventos ocorre em tempo real – ou, mais precisamente, quase em tempo real. As ondas de rádio viajam à velocidade da luz, mas os softwares e hardwares baseados em eventos normalmente têm algumas latências. 

No módulo Noções básicas da API da Lightning Platform, usamos a analogia de um radar em um navio pirata para representar a detecção de eventos. Essa analogia funciona bem para o streaming de eventos PushTopic, que são baseados em alterações nos registros do Salesforce. Esse modelo de comunicação requer apenas um assinante. Mas com eventos de plataforma, há dois participantes na comunicação: um remetente e um receptor. Eles são dois dos componentes de uma arquitetura orientada a eventos.

Componentes de sistemas orientados a eventos

Antes de continuarmos, vamos definir alguns termos.

Evento
Uma mudança de estado que é significativa em um processo comercial. Por exemplo, a apresentação de uma ordem de compra é um evento significativo, pois o centro de processamento de pedidos espera receber uma notificação antes de processar o pedido.

Mensagem de evento
Uma mensagem que contém dados sobre o evento. Também é conhecida como uma notificação de evento. Por exemplo, uma mensagem de evento pode ser uma notificação sobre um pedido feito, contendo informações sobre o pedido.

Produtor de eventos
O editor de uma mensagem de evento em um canal. Por exemplo, um aplicativo para fazer pedidos.

Canal de eventos
Uma corrente de eventos na qual um produtor de eventos envia mensagens de evento e consumidores de evento leem essas mensagens.

Consumidor de evento
Um assinante de um canal que recebe mensagens do canal. Por exemplo, um aplicativo para processamento de pedidos que é notificado de novos pedidos.

O diagrama a seguir ilustra uma arquitetura de software baseada em eventos.

Um diagrama mostrando componentes de sistemas baseados em eventos: produtores de eventos, que inserem informações no barramento de eventos que, por sua vez, envia mensagens aos consumidores de eventos.

Diferentemente dos modelos de comunicação solicitação-resposta, a arquitetura de software criada em um modelo orientado a eventos desvincula produtores de eventos de consumidores de eventos, simplificando assim o modelo de comunicação em sistemas conectados. Nenhuma solicitação precisa ser feita a um servidor para se obter informações sobre determinado estado. Em vez disso, um sistema se inscreve em um canal de eventos e é notificado sempre que há ocorrência de novos estados. Qualquer número de consumidores pode receber e reagir aos mesmos eventos. Quando um evento ocorre, os sistemas obtêm informações e podem reagir a elas quase em tempo real. Os sistemas que enviam eventos e os que recebem os eventos não têm dependências uns dos outros, exceto pela semântica do conteúdo da mensagem.

A plataforma de sistema de mensagens empresarial do Salesforce oferece os benefícios da arquitetura de software orientada a eventos. Os eventos de plataforma são as mensagens de evento que seus aplicativos enviam e recebem. Eles simplificam o processo de comunicação de alterações e de reação a elas sem precisar que você escreva uma lógica complexa. Editores e assinantes se comunicam entre si por meio de eventos de plataforma. Um ou mais assinantes pode ouvir o mesmo evento e executar ações.

Digamos que uma agência de notícias chamada Cloud News envia eventos para clientes inscritos com as últimas notícias sobre as condições do tráfego e das estradas em um destino turístico de retiro nas montanhas. O conteúdo desses eventos não são apenas as notícias em si, mas também os detalhes relacionados como, por exemplo, se uma notícia é urgente ou não e o local do incidente. Os assinantes podem receber esses eventos e determinar que ações tomar com base na urgência da notícia.

Tudo isso parece muito bom, mas quais seriam alguns casos reais em que você poderia utilizar eventos de plataforma? É claro, o uso de eventos de plataforma não é restrito a uma agência de notícias. A seguir estão algumas aplicações úteis.

Exemplos de quando usar eventos de plataforma

Vamos dar uma olhada em alguns cenários de negócios que utilizam eventos de plataforma. Nesses cenários, o Salesforce e os sistemas externos se comunicam por meio de mensagens de eventos de plataforma. No primeiro cenário, um aplicativo no Salesforce notifica aplicativos externos para processamento de pedidos de um pedido de envio de produto. No segundo cenário, um aplicativo de produto externo notifica o Salesforce de devoluções de mercadorias. O último cenário mostra como as mensagens de evento são usadas no Salesforce por meio de acionadores.

Plataforma para aplicativo externo: processamento de pedidos em um aplicativo de fornecedor

Quando uma oportunidade é fechada no Salesforce, sua empresa ganhou um negócio com um cliente. Digamos que você usa fornecedores para enviar produtos associados a uma oportunidade. Cada fornecedor tem um aplicativo externo que processa o envio de pedidos. O aplicativo externo ouve os eventos de plataforma. Quando uma oportunidade é fechada, um acionador, que faz parte de um aplicativo de pedido de produto no Salesforce, é ativado e publica uma mensagem de evento de plataforma. Cada aplicativo de fornecedor é notificado do evento e cria um pedido de envio para um produto específico.

Neste diagrama, um aplicativo de pedido de produto publica um evento de pedido em um barramento de eventos. Diversos aplicativos de fornecedores estão inscritos no barramento de eventos e recebem o evento.

Aplicativo externo para aplicativo de plataforma: processar devoluções de mercadorias no Salesforce

Digamos que alguém deseja devolver mercadorias compradas a um fornecedor. Um sistema externo envia solicitações de devolução de mercadorias para o Salesforce para serem processadas. O sistema externo publica um evento de plataforma para alertar o Salesforce da devolução de mercadorias. Um ouvinte de evento (um acionador) no Salesforce recebe o evento e executa algumas ações. Por exemplo, o acionador pode alertar o representante de vendas para a devolução e enviar um email de confirmação para o cliente.

Um aplicativo de fornecedor externo publica uma mensagem de evento de plataforma para uma solicitação de devolução de mercadorias. No Salesforce, um acionador se inscreve no barramento de eventos e recebe o evento.

Plataforma para plataforma: reatribuir registros de lead

Quando um lead é atribuído no Salesforce, um acionador de lead é ativado e verifica oportunidades e casos abertos relacionados ao proprietário do lead. Com base nos registros relacionados, o acionador publica um evento que é recebido por um aplicativo do Salesforce. Com base nas informações do evento, o aplicativo reatribui o lead e cria uma publicação no Chatter.

Neste cenário, você pode executar as mesmas ações usando outros recursos do Salesforce, como o Process Builder ou fluxos. Mas usando eventos de plataforma, você se beneficia de um modelo de programação baseado em eventos e de uma maneira padrão de programar em todos os seus aplicativos.

Neste diagrama, um aplicativo no Salesforce publica um evento de plataforma. Um acionador se inscreve neste canal de eventos e recebe o evento.

Características de evento de plataforma

Agora que você tem uma ideia de quando usar eventos de plataforma, vamos mergulhar mais fundo nos componentes e características deles.

Você define os dados personalizados contidos em eventos de plataforma. Assim como com objetos personalizados, você define eventos de plataforma no Salesforce. Você cria uma definição de evento de plataforma lhe dando um nome e adicionando campos personalizados. Aqui está uma definição de amostra de campos personalizados para um evento de notícias para a agência Cloud News.

Rótulo/Nome do campo Nome da API do campo Tipo de campo
Localização Location__c Tamanho
do texto: 100
Urgente Urgent__c Caixa de seleção
News Content News_Content__c Área do texto (longo)

Eventos de plataforma e sObjects

Um evento de plataforma é um tipo especial de entidade do Salesforce, similar em muitos aspectos a um sObject. Uma mensagem de evento é uma instância de um evento de plataforma, mais ou menos da mesma forma que um registro é uma instância de um objeto personalizado. Diferentemente do que acontece com objetos personalizados, você não pode atualizar nem excluir registros de evento nem visualizá-los na interface do usuário do Salesforce.

Você pode definir permissões de leitura e criação para eventos de plataforma. Você concede permissões a usuários em perfis ou em conjuntos de permissões.

Usar eventos de plataforma em aplicativos externos e nativos

Eventos de plataforma permitem o fluxo de mensagens de evento dentro do Salesforce e de ou para aplicativos externos. Os aplicativos na Salesforce Platform utilizam um método do Apex para publicar eventos e um acionador do Apex ou o componente do Lightning empApi para consumir eventos. Como uma alternativa ao código, você pode publicar eventos com ferramentas declarativas, como o Process Builder e o Flow Builder. Aplicativos externos publicam eventos usando a API sObject e consomem eventos usando CometD. Como você pode ver, há uma grande flexibilidade na maneira como você escolhe usar eventos de plataforma!

Diferenças entre eventos de plataforma e outros eventos de streaming

E outros eventos de streaming? Outros eventos incluem PushTopic e eventos genéricos. Com eventos PushTopic, os clientes recebem mensagens sobre mudanças em registros do Salesforce com base em uma consulta predefinida. Com eventos genéricos, você pode enviar e receber conteúdo de mensagem (cargas úteis) arbitrário não necessariamente ligado a registros do Salesforce. Eventos de plataforma são similares a eventos genéricos, mas oferecem personalização mais avançada. Com eventos de plataforma, você pode publicar quaisquer dados personalizados. Você define o esquema de dados de evento em um nível granular como campos tipados. Além disso, você pode usar eventos de plataforma em aplicativos nativos da Salesforce Platform, assim como em aplicativos externos. Use eventos de plataforma nos seguintes casos:

  • Para enviar e receber dados de evento personalizado com um esquema predefinido
  • Para publicar ou se inscrever em eventos no Apex
  • Pela flexibilidade de publicar e processar eventos dentro e fora da Salesforce Platform

Esta tabela compara os recursos de eventos genéricos e eventos de plataforma.

Recurso Evento genérico Evento de plataforma
Definir esquema de evento como campos tipados
Marca de seleção
Incluir cargas úteis definidas pelo usuário Marca de seleção Marca de seleção
Publicar eventos via uma ou mais APIs Marca de seleção Marca de seleção
Publicar eventos via Apex
Marca de seleção
Inscrever-se via CometD Marca de seleção Marca de seleção
Inscrever-se via acionadores do Apex
Marca de seleção
Publicar declarativamente usando o Process Builder e o Flow Builder
Marca de seleção
Nota

Nota

Para uma comparação de mais tipos de eventos, consulte Recursos de eventos de streaming no Guia do desenvolvedor da API de streaming.

Na próxima unidade, falaremos sobre como definir um evento de plataforma e publicar eventos.