Na versão anterior postagem no blog discutimos como o Couchbase pode se integrar perfeitamente em uma Arquitetura orientada a eventos. Usando o Couchbase Eventing Service, as mutações de documentos podem ser publicadas em um Solace PubSub+ de onde os dados são disponibilizados para os microsserviços assinantes quase em tempo real.

Esta postagem se concentra em como os microsserviços como assinantes de tópicos podem aproveitar o Couchbase como um armazenamento de dados escalável e resiliente.

Visão geral da arquitetura e aplicativo de amostra

Neste aplicativo de amostraEm seguida, assinamos um tópico do Solace PubSub+, processamos os dados e atualizamos o documento no Couchbase.

Em nosso aplicativo de exemplo, armazenamos os detalhes do hotel no Couchbase. As atualizações da configuração do hotel são publicadas em um tópico do Solace PubSub+. Criamos um aplicativo que assina o tópico, recupera os dados atualizados e atualiza a configuração do hotel existente no Couchbase.

Usamos o amostra de viagem que contém dados de amostra, como voos, rotas e outros. Em nosso exemplo, focamos no hotel documentos armazenados no inventário escopo no hotel coleção. Todos os documentos de hotel consistem em um documento JSON com vários atributos.

Atualizaremos apenas um pequeno subconjunto de atributos para este tutorial, como animais_permitidos e internet_livre.

Event-driven architecture with Solace and Couchbase

O aplicativo de exemplo assina um tópico do Solace e atualiza os dados do hotel no Couchbase. Outros aplicativos podem fornecer as alterações na configuração do hotel. Usamos um serviço simples que publica atualizações no tópico.

Legenda: O aplicativo de amostra assina um tópico do Solace e atualiza os dados do hotel no Couchbase. Outros aplicativos podem fornecer as alterações na configuração do hotel. Usamos um serviço simples que publica atualizações no tópico.

Pré-requisitos

Consulte os pré-requisitos para este aplicativo de amostra:

Couchbase Capella

Criar uma conta gratuita Couchbase Capella e siga as instruções para provisionar seu cluster de avaliação. Isso leva apenas alguns minutos e fornece a você um cluster do Couchbase completo, incluindo o Dados e o conjunto de dados de amostra, amostra de viagem, que usaremos ao longo desta postagem do blog.

Você pode usar este tutorial quando não estiver usando nossa oferta gerenciada do Couchbase Capella. O amostra de viagem faz parte do produto do servidor Couchbase e pode ser importado usando o console do Couchbase.

Nuvem do corretor de eventos Solace PubSub+

Inscreva-se gratuitamente Avaliação do Solace na nuvem e criar um serviço/VPN. Usaremos a VPN para nos conectarmos a um Solace Topic.

 

Revisão do código - Assinante e editor do Solace

Para assinar mensagens do tópico do Solace, usamos a API Java do Solace. Este exemplo de implementação é derivado de exemplos na documentação do Solace. Para obter detalhes sobre a implementação, consulte a documentação do Solace.

Configuramos o JCSMPProperties com as informações de acesso relevantes disponíveis na interface da Web do Solace. Em seguida, criamos um JCSMPSession e um Tópico.

Para assinar as mensagens no tópico, implementamos um XMLMessageConsumer:

No onReceive pegamos a mensagem, convertemos em uma string e, em seguida, chamamos o método upsertHotelData método de UpdateHotelData que contém a implementação do Couchbase discutida um pouco mais adiante nesta postagem do blog.

Adicionamos a assinatura do tópico à sessão e iniciamos o consumidor de mensagens.

Para podermos testar a implementação, também criamos um editor de mensagens. Para isso, primeiro implementamos um XMLMessageProducer.

Com o produtor de mensagens instalado, agora podemos enviar mensagens, conforme mostrado abaixo. 

Inserção dos dados no Couchbase

Com a lógica para assinar e publicar mensagens implementada, vamos nos concentrar agora em como atualizar os documentos do hotel no Couchbase.

Para este exemplo, supomos que a mensagem recuperada do tópico tenha o formato JSON abaixo. Incluindo um hotel_id que usaremos como o ID do documento dos documentos do hotel armazenados no Couchbase, bem como vários atributos que podemos alterar:

Para estabelecer uma conexão segura de nosso aplicativo com o Couchbase Capella, precisamos:

    • Crie um usuário de banco de dados e conceda a esse usuário acesso aos dados do hotel.
    • Coloque na lista de permissões o endereço IP do host que está executando o aplicativo
    • Capture o URL da conexão segura

Você pode gerenciar todos esses detalhes no plano de gerenciamento do Capella. Faça login na Capella no navegador:

  1. Abra o Teste - Cluster e navegue até o cluster Conectar guia
  2. Role para baixo até a seção Acesso ao banco de dados e clique em Gerenciar credenciaisSet database access credentials in Couchbase Capella
  3. Clique em Criar credenciais de banco de dados e forneça um nome de usuário e uma senha do banco de dados. Configure o acesso em nível de Bucket para o inventário escopo no amostra de viagem e conceder acesso de leitura/gravação.
    Set cluster database credentials in Couchbase Capella
  4. Coloque o endereço IP do aplicativo na lista de permissões clicando em Gerenciar IPs permitidos e depois Adicionar IP permitido. Ao executar o aplicativo a partir de sua máquina local, basta clicar em Adicionar meu IP e seu endereço IP externo será descoberto e adicionado automaticamente.
    Whitelist an IP address in Couchbase Capella
  5. No Rede de longa distância copie o URL da conexão.

Revisão de código - conectar-se ao Couchbase e atualizar documentos

Nós nos conectamos ao Couchbase Capella como primeira etapa, criando um objeto de cluster. Fornecemos o URL do endpoint capturado na etapa anterior, bem como as credenciais de usuário do banco de dados.

Depois que o objeto bucket for criado, poderemos recuperar o hotel e usá-lo posteriormente para inserir as alterações no documento. As hotel está dentro do escopo inventário escopo do amostra de viagem balde.

Observe que eu uso o padrão singleton para usar o mesmo objeto de coleção em todas as solicitações subsequentes. Veja a implementação de exemplo para obter detalhes em meu projeto no GitHub.

Vamos ver agora como podemos atualizar os documentos do hotel com os dados recebidos do Topic.

A mensagem recebida é uma string, portanto, como primeira etapa, precisamos convertê-la em um objeto JSON.

Como os dados de entrada do tópico contêm apenas um subconjunto de todos os atributos do documento do hotel, precisamos considerar como atualizar os campos do documento com mais eficiência. 

Há duas opções possíveis:

    1. Usamos o ID do documento para recuperar o documento completo do Couchbase, atualizar os atributos e gravar o documento novamente.
    2. Usamos a API de subdocumento no Couchbase para atualizar apenas os campos dedicados dentro do documento, em vez de substituir o documento inteiro.

A primeira opção é comumente usada para atualizar ou fazer upsert de documentos. No entanto, se trabalharmos com documentos maiores e quisermos atualizar apenas uma pequena parte deles, não há necessidade de enviar o documento inteiro pela rede. Em nossa implementação abaixo, usaremos a API de subdocumento para resolver e atualizar campos no documento do hotel.

Usamos o lookupIn para consultar o documento em relação a determinados caminhos. Nesse caso, os diferentes componentes do caminho são separados por pontos (.). A operação pets_ok e internet_livre estão localizados na raiz do documento em nosso cenário. Em seguida, percorremos o resultado e exibimos os valores atuais.

O mutateIn permite a atualização de um ou mais caminhos em um documento. Identificamos o documento no Couchbase por seu ID e fornecemos uma matriz de caminhos e valores que queremos definir.

Por último, mas não menos importante, executamos o lookupIn para verificar se a atualização foi bem-sucedida.

Próximas etapas

Este artigo nos ensinou a integrar o corretor de eventos Solace ao Couchbase usando os SDKs Java do Couchbase e do Solace.

Autor

Postado por Marian Puhl, engenheira de soluções

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

Deixar uma resposta