Nos complace anunciar el apoyo de Timers en Couchbase 6.0 Beta liberación. Se trata de una importante innovación en Funciones Couchbase que permite el cálculo asíncrono en referencia a eventos de reloj de pared.
Los temporizadores son construcciones mediante las cuales los desarrolladores pueden especificar una rutina (lógica de negocio) que se activará en un momento futuro.
Ejemplos de casos de uso
- Archivar un documento antes de que caduque
- Enviar una notificación (SMS o correo electrónico) a un cliente 1 hora después de registrarse en un hotel
- Filtrar a los pasajeros que no hayan facturado 30 minutos antes de la salida de su vuelo
- Evaluación del riesgo de las transacciones con tarjeta de crédito casi en tiempo real
- Comprobar si un documento ha cambiado en una ventana de tiempo especificada desde su última actualización.

Temporizadores en funciones Couchbase
Sintaxis de temporizadores
La forma de crear un temporizador es:
createTimer(callback_function, expiry_ts, reference, context_payload)
donde:
función_de_retornofunción que se llamará cuando se ejecute el temporizador
caducidad_tsFecha y hora de ejecución de la función (Javascript Date Object)
referencia: una cadena/id de referencia única
carga_contextoCarga útil adicional que se enviará a la función de rellamada.
Nota: La combinación de nombre de función, función de devolución de llamada y referencia debe ser única y, en caso contrario, se sobrescribirá el temporizador existente. O, en otras palabras, para una función determinada, los temporizadores creados dentro de su ámbito deben tener una combinación única de función de devolución de llamada y referencia.
Código de muestra
El siguiente es un código de ejemplo que crea un temporizador que está programado para ejecutarse 5 segundos desde su hora de creación.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
function OnUpdate(doc,meta) { log('document', doc); var expiry = new Date(); //get current time expiry.setSeconds(expiry.getSeconds() + 5); //add 5 seconds to it var context_payload = {docID : meta.id, random_text : "arbitrary text"}; createTimer(timerCallback, expiry, meta.id, context_payload); } function timerCallback(context) { log('From timerCallback', context); dst_bucket[context.docID] = context.random_text; } |
Funciones del temporizador
Aunque la construcción parece extremadamente sencilla y fácil de consumir, la plataforma tiene que hacer un gran esfuerzo para ofrecer la semántica.
Algunas de sus características más destacadas son:
- Procesamiento distribuido a escala: Separación automática de temporizadores entre nodos que permite una escalabilidad elástica. Esto también significa que los temporizadores no tienen por qué ejecutarse en el mismo nodo que creó el temporizador.
- Al menos una ejecución de los temporizadores a pesar de los fallos de los nodos y los reequilibrios del clúster.
- Ejecución eventual de temporizadores en caso de gran acumulación de eventos por procesar.
Comportamiento de los temporizadores
- Los enlaces que se crearon para la función también serán accesibles dentro de los temporizadores. Esto mantiene el código consistente y legible.
- Los temporizadores siguen la misma semántica de tiempo de espera que sus funciones padre. Así, si una función tiene un tiempo de ejecución de 60 segundos, cada uno de los temporizadores creados a partir de la función heredará el mismo valor de tiempo de ejecución de 60 segundos.
- Los temporizadores no pueden depurarse con el depurador visual.
- log() los mensajes impresos desde los Temporizadores serán capturados en el mismo log de la aplicación que la Función padre.
- Si la función se elimina o no se despliega, también se eliminarán todos los temporizadores asociados.
- Los temporizadores no se reinician automáticamente si su ejecución falla debido a un error de ejecución o programático. Se recomienda que el código se maneje adecuadamente con excepciones (es decir, que se incluya un bloque try-catch).
- La información sobre los temporizadores asociados a una función se almacena en el bucket de metadatos, por lo que este bucket no debe borrarse ni actualizarse. Se recomienda que el bucket de metadatos no sea utilizado por ninguna otra aplicación.
- Dado que la información de los temporizadores se almacena en el bucket de metadatos, si el caso de uso lo requiere y el número de temporizadores en el sistema es elevado, se recomienda que la memoria asignada al bucket de metadatos sea también adecuadamente alta.
Recursos relacionados
- Descargar Couchbase Server 6.0 Beta
- Más información Servidor Couchbase y Eventos