Temos o prazer de anunciar o suporte de Timers em Couchbase 6.0 Beta lançamento. Essa é uma inovação importante na Funções do Couchbase que permite a computação assíncrona em referência a eventos de relógio de parede.
Os temporizadores são construções por meio das quais os desenvolvedores podem especificar uma rotina (lógica comercial) a ser acionada em um momento futuro.
Exemplos de casos de uso
- Arquivar um documento antes da expiração
- Enviar uma notificação (SMS ou e-mail) a um cliente 1 hora após o check-in em um hotel
- Filtrar os hóspedes que não fizeram o check-in 30 minutos antes da partida do voo
- Avaliação de risco quase em tempo real para transações com cartão de crédito
- Verificar se um documento foi alterado em uma janela de tempo especificada desde sua última atualização

Temporizadores nas funções do Couchbase
Sintaxe de temporizadores
A maneira de criar um cronômetro é:
createTimer(callback_function, expiry_ts, reference, context_payload)
onde:
callback_functionFunção a ser chamada quando o cronômetro for executado
expiração_tsData e hora: registro de data e hora em que a função deve ser executada (objeto Javascript Date)
referência: um id/string de referência exclusivo
context_payloadCarga útil adicional que deve ser enviada à função de retorno de chamada.
Observação: A combinação de nome da função, função de retorno de chamada e referência deve ser exclusiva e, se não for, o cronômetro existente será substituído. Ou, em outras palavras, para uma determinada função, os temporizadores criados dentro de seu escopo devem ter uma combinação exclusiva de função de retorno de chamada e referência.
Código de amostra
O código a seguir é um exemplo de código que cria um cronômetro programado para ser executado 5 segundos a partir do momento de sua criação.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
função Sobre a atualização(doc,meta) { registro("documento, doc); var expiração = novo Data(); //obter a hora atual expiração.setSeconds(expiração.getSeconds() + 5); //adicione 5 segundos a ele var context_payload = {docID : meta.id, texto_aleatório : "texto arbitrário"}; createTimer(retorno do cronômetro, expiração, meta.id, context_payload); } função retorno do cronômetro(contexto) { registro('De timerCallback', contexto); dst_bucket[contexto.docID] = contexto.texto_aleatório; } |
Recursos do cronômetro
Embora a construção pareça extremamente simples e fácil de consumir, há muito trabalho pesado que é feito pela plataforma para oferecer a semântica.
Alguns recursos notáveis incluem:
- Processamento distribuído em escala: Distribuição automática de cronômetros entre os nós, o que permite escalabilidade elástica. Isso também significa que os cronômetros não precisam ser executados no mesmo nó que realmente criou o cronômetro.
- Pelo menos uma execução de cronômetros, apesar de falhas de nós e reequilíbrios de cluster
- Execução eventual de cronômetros no caso de um grande acúmulo de eventos a serem processados
Comportamentos dos cronômetros
- As associações criadas para a função também poderão ser acessadas dentro dos temporizadores. Isso mantém o código consistente e legível.
- Os temporizadores seguem a mesma semântica de tempo limite de suas funções pai. Portanto, se uma função tiver um tempo limite de execução de 60 segundos, cada um dos temporizadores criados a partir da função herdará o mesmo valor de tempo limite de execução de 60 segundos.
- Os temporizadores não podem ser depurados usando o depurador visual.
- As mensagens de log() impressas dos Timers serão capturadas no mesmo log do aplicativo que a Função principal.
- Se a função for excluída ou não implantada, todos os temporizadores associados também serão excluídos.
- Os temporizadores não são repetidos automaticamente se sua execução falhar devido a um erro programático ou de tempo de execução. Recomenda-se que o código seja tratado adequadamente com exceções (ou seja, encerrado em um bloco try-catch)
- As informações sobre os temporizadores associados a uma função são armazenadas no compartimento de metadados e, portanto, esse compartimento não deve ser excluído ou liberado, nem as chaves devem ser atualizadas. Recomenda-se que o compartimento de metadados não seja usado por nenhum outro aplicativo.
- Como as informações do timer são armazenadas no bucket de metadados, se o caso de uso exigir e o número de timers no sistema for alto, recomenda-se que a memória atribuída ao bucket de metadados também seja adequadamente alta.
Recursos relacionados
- Download do Couchbase Server 6.0 Beta
- Saiba mais sobre Servidor Couchbase e Eventos