Serviço de eventos do Couchbase fornece uma estrutura para escrever suas próprias funções para processar eventos de alteração de dados (criação, atualização, exclusão/expiração). O Couchbase Server 6.5 apresenta um conjunto de aprimoramentos importantes no Eventing Service que permitem muitos casos de uso novos e simplificam a manutenção do Evening Functions.

Mutações do Bucket de Origem

Uma função Eventing é definida para ouvir as alterações de um bucket, conhecido como o bucket de origem da função. As versões anteriores do Couchbase não permitiam que uma função alterasse os documentos em seu bucket de origem, porque se essas mutações estiverem sendo alimentadas de volta para a função, isso poderá criar uma recursão infinita. Essa limitação foi removida no Couchbase 6.5: uma função Eventing agora pode alterar os documentos no bucket de origem, até mesmo o documento do evento de alteração. O Couchbase torna essas alterações seguras, suprimindo a propagação recursiva para a mesma função Eventing.

A possibilidade de alterar documentos no bucket de origem abre muitos casos de uso interessantes: enriquecer os documentos alterados com novos atributos, realizar atualizações em cascata ou exclusões de documentos dependentes, gerar novos documentos no mesmo bucket.

O exemplo abaixo usa Eventing para gerar automaticamente atributos de documento que contêm a hora de criação do documento e a hora de sua última atualização. Vamos ouvir as alterações no atributo amostra de viagem e geram ou atualizam os atributos de tempo sempre que um documento é alterado. As funções de eventos acessam os compartimentos por meio dos chamados bucket bindings. Criamos uma vinculação de bucket de leitura e gravação no amostra de viagem ou seja, o bucket de origem, e dar a ele um alias balde:

Na próxima etapa, forneça o código da função:

No Sobre a atualização que é chamado em cada evento de inserção e atualização, gravamos a hora atual no atualizado (criando ou substituindo-o). Se o documento ainda não contiver criado presumimos que essa é a primeira alteração no documento, portanto, adicionamos criado contendo também a hora atual. Depois de estendermos o documento com os novos atributos, nós o gravamos de volta no bucket de origem com o mesmo ID de documento.

Ao mudar atualizado e criado geramos novas alterações no documento. A estrutura Eventing suprime a recursão ao não propagar essas alterações para nossa função. Caso contrário, essas alterações são tratadas de maneira normal: elas são replicadas, indexadas e até propagadas para outras funções de Eventing.

Invocação de funções externas com o cURL

As funções de eventos podem interagir com sistemas externos usando enrolar para chamar sua API REST. A possibilidade de interagir com sistemas externos abre uma série de novos casos de uso, como a propagação de alterações de dados para outros sistemas, notificando o aplicativo sobre eventos interessantes, enriquecendo documentos com dados de sistemas externos e assim por diante. Uma prévia da função curl já estava disponível em versões anteriores do Couchbase, mas com a versão 6.5 o recurso foi reprojetado para torná-lo confiável e seguro: as chamadas cURL são limitadas a um conjunto predefinido de ligações de URL, para cada ligação podemos especificar autenticação, criptografia e validação de certificado, conforme necessário.

No exemplo a seguir, definiremos um aplicativo que escuta as alterações no bucket de amostra de viagem. Salve o código do aplicativo abaixo no arquivo app.js:

O aplicativo define um ponto de extremidade /api/companhia aérea para receber notificações sobre alterações nos dados da companhia aérea como solicitações POST com o corpo contendo o ID da companhia aérea. O aplicativo está configurado com autenticação básica, esperando que o usuário couchbase com a senha senha.

Execute os seguintes comandos para instalar os pacotes node.js necessários e executar o aplicativo:

Agora vamos criar uma Eventing Function que notifica nosso aplicativo sobre as alterações nos documentos da companhia aérea. Todas as APIs externas que podem ser chamadas pela função devem ser declaradas como ligações de URL. Supondo que 192.168.61.1 seja o IP da máquina em que iniciamos o aplicativo, declaramos uma associação de URL para o URL http://192.168.61.1:3000/api e nomeá-lo notifyApi.

Uma ligação de URL pode usar o protocolo http ou https. Também podemos especificar diferentes tipos de autenticação e ativar cookies para evitar a repetição da autenticação. No nosso caso, selecionamos a autenticação básica com o usuário couchbase e senha senha.

Na próxima etapa, forneça o código da função, que escuta as alterações dos documentos do tipo companhia aérea e encaminha essas alterações para o aplicativo usando enrolar chamadas:

O enrolar recebe três parâmetros: o método da solicitação HTTP, a vinculação de URL e o objeto de solicitação que pode conter os seguintes atributos:

    • caminho especifica o subcaminho da ligação de URL. Em nosso exemplo, anexamos /companhia aérea para fazer uma chamada para http://192.168.61.1:3000/api/airline
    • o corpo da solicitação HTTP. O objeto fornecido será codificado e transformado em uma cadeia de caracteres JSON, a menos que seja especificado de forma diferente pelo parâmetro codificação atributo
    • parâmetros contém pares de valores-chave a serem passados como parâmetros de solicitação HTTP
    • cabeçalhos contém pares de valores-chave a serem passados como cabeçalhos HTTP adicionais.

O objeto de resposta retornado pelo enrolar contém o status, o corpo e os cabeçalhos da resposta HTTP. A função lança exceções em caso de vários erros, como URL inacessível ou parâmetros inválidos. Envolva a chamada em um bloco try-catch se precisar registrar esses erros.

Depois de criar a função, volte para a guia Eventing e implemente a função NotifyChanges. Se você optar por alimentar todo o conteúdo dos baldes, o aplicativo será notificado sobre todos os baldes já existentes. companhia aérea documentos e registrarão suas IDs.

Pausa e retomada de uma função

Uma função Eventing em execução pode ser pausada e retomada posteriormente. Quando retomada, a função continua processando os eventos no ponto em que foi pausada. O código e as configurações de uma função pausada podem ser modificados, portanto, quando retomados, os eventos adicionais serão processados com a nova versão da função.

Esse recurso é especialmente útil para manter as funções de Eventing que já estão em produção. A definição da função pode ser aprimorada com novas funcionalidades ou ajustada após a alteração do modelo de dados. No entanto, essas alterações de código no meio do voo devem ser compatíveis com quaisquer retornos de chamada de cronômetro pendentes agendados pelo manipulador

Por exemplo, se modificarmos o código de nosso NotifyChanges localize a função na visualização Eventing e clique em seu ícone Pausa botão:

Aguarde até que a função seja mostrada como pausada, o que significa que ela parou de processar os eventos. Nesse estado, podemos modificar seu código e suas configurações. Após realizar as modificações necessárias, podemos retomar a função.

A função será reimplantada com a nova implementação e continuará processando os eventos no ponto em que parou.

Recursos

Baixar

Faça o download do Couchbase Server 6.5

 Documentação

Notas de versão do Couchbase Server 6.5

Couchbase Server 6.5 O que há de novo

Blogs

Blog: Anunciando o Couchbase Server 6.5 - O que há de novo e aprimorado

Blog: O Couchbase traz as transações ACID distribuídas de vários documentos para o NoSQL

Todos os blogs 6.5

Autor

Postado por Vaidas Gasiunas, arquiteto de soluções, Couchbase

Vaidas Gasiunas é arquiteto de soluções na Couchbase Alemanha, ajudando os clientes da região a adotar o Couchbase para seus casos de uso. Vaidas tem muitos anos de experiência em arquitetura e desenvolvimento de sistemas de banco de dados com foco em escalabilidade e otimização de desempenho.

Um comentário

  1. ashishmishra037@gmail.com março 14, 2021 em 7:21 pm

    Ei, temos a funcionalidade de identificar as modificações que ocorreram no documento?

Deixar uma resposta