A arquitetura assíncrona orientada por eventos do Couchbase é o núcleo de seu design. As mutações de documentos são transmitidas continuamente para o Couchbase Index, Analytics, Eventos e serviços de pesquisa.

Essa arquitetura garante que os serviços do Couchbase sejam atualizados em tempo real e nos permite integrar perfeitamente o Couchbase à sua arquitetura orientada por eventos.

Esta postagem do blog demonstra como você pode integrar o Couchbase a um corretor de eventos. Nesta postagem, eu uso o popular Corretor de mensagens Solace PubSubmas a integração com outros produtos de mensagens, como o Kafka, é muito semelhante.

Visão geral da arquitetura

O Couchbase pode interagir com outros sistemas usando os SDKs do Couchbase e vários conectores do Couchbase, como o que temos para o Kafka. Para essa integração, usamos uma abordagem alternativa, o Couchbase Eventing Service. O Eventing Service permite que você atue prontamente nas alterações (mutações) dos seus dados acionando funções JavaScript. O Eventing Service oferece suporte nativo a cURL e permite que você chame serviços REST externos diretamente do ouvinte JavaScript.

Usamos esse recurso para enviar dados ao Solace PubSub+ usando sua API de mensagens REST. As mensagens são enviadas para um tópico do Solace que seus assinantes podem consumir.

Nessa integração, implementamos um unidirecional POST para o Solace, ilustrado na figura abaixo. Aqui, a função Eventing do Couchbase envia um HTTP POST com o documento no corpo da mensagem para o agente de eventos do Solace PubSub+. O agente de eventos acusa o recebimento da mensagem com uma mensagem HTTP 200 OK resposta. A mensagem está agora nas mãos do Solace Event Broker, onde os consumidores podem se inscrever para receber as mensagens no tópico.

Consumers subscribe to the Topic.

Figura 1. As mutações de documentos no Couchbase acionam um ouvinte de eventos que envia o documento para um tópico do Solace por meio de um HTTP POST. Os consumidores se inscrevem no tópico.

O Solace pode processar ainda mais a mensagem, ou os assinantes podem se inscrever no tópico por meio de JMS, MQTT e outros protocolos. Neste post, usarei um consumidor REST. Um microsserviço pode consumir as mensagens fornecendo um ponto de extremidade de retorno de chamada HTTP ao criar um ponto de extremidade de consumidor REST no Solace. O ponto de extremidade de retorno de chamada é chamado quando uma nova mensagem é adicionada ao tópico.

Aplicativo de amostra

Para demonstrar isso, criamos um cenário de exemplo usando um conjunto de dados que vem de fábrica com o Couchbase, o amostra de viagem balde.

Em nosso cenário de teste, queremos publicar todas as alterações no hotel documentos para o Solace. Conforme mostrado nesta figura, um microsserviço assinará e consumirá as alterações.

As partes do aplicativo de amostra são:

  1. A Função de eventos do Couchbase é acionado para cada mutação no hotel documentos. A função de eventos enviará o hotel documento para um tópico do Solace 
  2. Corretor de eventos Solace contendo fila e tópico, bem como configuração de entrega REST 
  3. A Consumidor REST assinou o tópico Solace

Pré-requisitos

Esses três pré-requisitos são necessários para acompanhar o aplicativo de amostra:

Couchbase 7 Enterprise Edition

Você pode executar o Couchbase como um cluster de nó único no Docker em um computador local.

Criamos um cluster do Couchbase de nó único para fins de desenvolvimento (clusters de nó único não são recomendados para uso em produção). Inclua os serviços Eventing e Data ao configurar o Couchbase em seu cluster de um nó.

Nuvem do corretor de eventos Solace PubSub+

Inscreva-se gratuitamente Avaliação do Solace na nuvem e crie um serviço/VPN. Configuraremos a VPN mais adiante nas instruções.

Consumidor REST

Precisamos de um ponto de extremidade HTTP que aceite HTTP POST solicitações. Como estamos usando o Solace PubSub+ Cloud, o consumidor REST precisa estar acessível pela Internet.

Em vez de hospedar seu próprio consumidor REST, você pode usar um serviço gratuito (como o Beeceptor) que permite que você receba HTTP POST solicita e reconhece um HTTP 200 resposta. Isso é tudo de que precisamos para verificar se a integração está funcionando. Se você planeja realizar testes mais extensos, pode escrever seu próprio microsserviço de consumidor REST.

Para isso, acesse Beeceptor.com e configurar um nome de endpoint. Neste exemplo, eu uso cbtest como o ponto final.

Capture o endereço do ponto de extremidade: https://cbtest.free.beeceptor.comque será necessário posteriormente ao configurar o ponto de extremidade de recebimento no Solace.

Configuração

Com os pré-requisitos em vigor, é hora de configurar os vários serviços para o aplicativo de amostra.

Configuração do Solace

Primeiro, precisamos configurar a Solace para criar o tópico, a fila e o endpoint de entrega REST correspondentes. Depois de se registrar na nuvem da Solace, certifique-se de ter criado um serviço/VPN. 

Cada uma das etapas a seguir é ilustrada com uma captura de tela para mostrar como deve ser a sua configuração à medida que você a segue.

Configurar fila e tópico

Vamos configurar o tópico para receber as mensagens que enviamos do Eventing Service do Couchbase.

Na interface administrativa do Solace, vá para Filas/pontos de extremidade de tópico e criar um novo Ponto de extremidade do tópico chamado T/rest/pubsub usando as configurações padrão.

Edit Topic Endpoint Settings

Em seguida, vá para Filas e criar uma fila chamada Q/couchbase/entrada. Mantenha os valores padrão.

Edit Queue Settings

Agora abra o Q/couchbase/entrada no modo de edição e selecione a opção Assinaturas guia. Adicionar um T/rest/pubsub assinatura de tópicos do Q/couchbase/entrada fila.

Q/couchbase/input

Com a fila e o tópico instalados, o cliente REST agora pode se inscrever nele.

Ir para  Conexões com clientes e mudar para o REST guia. Criar uma nova Ponto de extremidade de entrega REST com o nome RDPCouchbase. Mantenha os valores padrão e certifique-se de habilitar o novo endpoint.

Edit REST Delivery Endpoint

Navegue até o endpoint recém-criado e vá para a seção Consumidores REST guia.

Criar um novo Consumidor REST com o nome demoConsumidor e ativar o consumidor.

Forneça o endereço do host remoto para o serviço REST de consumo. Conforme descrito no pré-requisito, forneça seu próprio endpoint ou crie um endpoint de teste gratuito no Beeceptor.

Configure a porta remota; usamos o Beeceptor com a porta 80 e mantemos os valores padrão restantes.

Navegue até a seção Ligações de consulta na guia RDPCouchbase REST e adicione a associação para a fila de entrada/Q/couchbase criada recentemente. Adicione o Post Request Target, que corresponde ao caminho do URL do receptor REST. Eu uso /callback.

Verificar a configuração do Solace REST

Para verificar se o Solace está configurado corretamente e se as mensagens REST podem ser consumidas pelo Solace, bem como enviadas ao cliente REST, execute o seguinte comando cURL:

Substitua o nome do host e as credenciais pela configuração de seu ambiente.

Isso conclui a configuração do Solace. Agora temos um tópico que pode receber mensagens e um assinante REST que fornece uma função de retorno de chamada.

Configuração do Couchbase

Com nosso nó do Couchbase executando os serviços Eventing e Data, podemos criar a função eventing.

Instale o amostra de viagem balde de amostra (Veja a documentação aqui). 

Crie um bucket chamado rr100 (para a proporção residente 100%) e um escopo chamado eventos. Nesse escopo, crie uma coleção chamada metadados.

rr100.eventing.metadata será usado pela função de evento para armazenar seus metadados. 

No Couchbase, antes da versão 7, você precisava criar um bucket dedicado para os metadados. Com a versão 7, aproveitamos o suporte a escopos e coleções para criar uma coleção dedicada para as informações de metadados de eventos.

Navegue até o serviço Eventing e crie uma nova função de evento clicando em Adicionar função.

O ouvinte de eventos escuta o hotel na coleção inventário escopo dentro do amostra de viagem bucket. Isso acionará nosso ouvinte de eventos sempre que um documento for alterado no hotel enquanto as alterações em documentos de outras coleções ou compartimentos não são coletadas.

O rr100.eventing.metadados é usado para armazenar os metadados das funções de eventos.

O curlSolaceRestUrl especifica o alias de URL para o ponto de extremidade REST do Solace receptor. Forneça o URL completo, incluindo o caminho do URL, representando o tópico que você criou durante a configuração do Solace. Por exemplo: https://mrd3aaxn3oc4d.messaging.solace.cloud:9443/T/rest/pubsub

O endpoint do Solace requer autenticação. Nós configuramos básico autenticação e fornecer as credenciais. 

(Observação: houve um erro no Couchbase 7.0.X que pode fazer com que a senha de suas credenciais cURL seja perdida. Os problemas podem ser evitados ao digitar novamente a senha se você editar as configurações da Eventing Function e executar um "Salvar".)

Agora podemos implementar o OnUpdate() Função JavaScript com a configuração de eventos em vigor. O Couchbase acionará essa função para qualquer mutação de documento no hotel coleção. 

Neste exemplo simples, enviamos todas as mutações de documentos para a Solace usando o suporte cURL no Eventing Service. Em um caso de uso no mundo real, normalmente aplicaríamos a filtragem com base em alguns atributos do documento e implementaríamos a função OnDelete para lidar com a exclusão de documentos.

Teste o aplicativo de amostra

Agora é hora de testar o aplicativo de amostra:

  1. Iniciar o evt_sendto_solace ouvinte de eventos
  2. Navegue até Documentos no console do Couchbase
  3. Selecione o travel-sample.inventory.hotel como mostrado aqui:
  4. Abrir um hotel edite os campos do documento e salve as alterações. Essa alteração no documento acionará um evento de atualização que será captado pelo nosso ouvinte de eventos.
  5. O ouvinte do evento agora enviará o documento atualizado para a Solace.
  6. Agora podemos verificar se o nosso consumidor Solace REST recebeu o documento atualizado. Observe que a Solace enviou o documento para o consumidor REST usando a função /callback especificado durante a vinculação à fila.

O documento faz mutação para os documentos do hotel na seção hotel As coleções agora são publicadas no Solace e enviadas aos assinantes do Solace.

Os serviços do Couchbase dependem do protocolo interno de alteração do banco de dados (DCP), que oferece suporte à visualização consistente de seus dados. O DCP não garante que você veja todas as alterações, mas garante que você veja as mais recentes. Por exemplo, se um documento em amostra de viagemO .inventory.hotel sofre mutações muito rapidamente, algumas das mutações intermediárias podem ser deduplicadas, portanto, o Eventing Service não verá todas as alterações.

Obrigado por se juntar a mim nesta demonstração.

Conclusão

Este artigo nos ensinou a integrar o Couchbase com o corretor de eventos Solace usando o serviço Couchbase Eventing.

Vemos como o Couchbase pode se integrar perfeitamente à sua arquitetura orientada a eventos. Agora você pode aproveitar ao máximo os aspectos de qualidade de serviço da plataforma Solace com mensagens garantidas e persistentes.

A lógica da função Eventing em nosso exemplo está limitada a uma solicitação cURL POST básica sem tratamento adequado de erros. Você deverá implementar lógica de erro e nova tentativa para uma solução pronta para produção.

Autor

Postado por Marian Puhl, engenheira de soluções

Marian Puhl é engenheiro de soluções da Couchbase na região nórdica.

Um comentário

  1. A chamada curl resulta na mensagem de erro "A capacidade de fazer chamadas curl está desativada". Não foi possível encontrar nenhuma documentação sobre como ativar. A funcionalidade curl já está ativada em "Configurações -> Configurações de consulta -> Configurações avançadas de consulta -> Acesso à função curl". Isso ocorre na Enterprise Edition 7.2.4 build 7070

Deixar uma resposta