Eventos

Mejoras en el servicio de eventos de Couchbase Server 6.5

Servicio de eventos Couchbase proporciona un marco para escribir tus propias funciones para procesar eventos de cambio de datos (creación, actualización, borrado/expiración). Couchbase Server 6.5 introduce un conjunto de importantes mejoras en el Servicio de Eventos que permiten un montón de nuevos casos de uso y simplifican el mantenimiento de las Funciones Vespertinas.

Mutaciones del cubo de origen

Una función Eventing está definida para escuchar los cambios de un bucket, conocido como el bucket fuente de la función. Las versiones anteriores de Couchbase no permitían a una función mutar documentos en su bucket fuente, porque si estas mutaciones se retroalimentaban a la función podía potencialmente crear una recursión infinita. Esta limitación ha sido eliminada en Couchbase 6.5: una función Eventing puede ahora cambiar los documentos en el bucket fuente, incluso el documento del evento de cambio. Couchbase hace tales cambios seguros suprimiendo su propagación recursiva a la misma función Eventing.

La posibilidad de modificar documentos en el bucket de origen abre muchos casos de uso interesantes: enriquecer los documentos modificados con nuevos atributos, realizar actualizaciones o eliminaciones en cascada de documentos dependientes, generar nuevos documentos en el mismo bucket.

El siguiente ejemplo utiliza Eventing para generar automáticamente atributos de documento que contienen la hora de creación del documento y la hora de su última actualización. Vamos a escuchar a los cambios en el viaje-muestra y generan o actualizan los atributos de tiempo cada vez que se modifica un documento. Las funciones de eventos acceden a los buckets a través de los llamados bucket bindings. Creamos un bucket de lectura-escritura en el archivo viaje-muestra es decir, el cubo de origen, y asignarle un alias cubo:

En el siguiente paso proporcione el código de la función:

En el OnUpdate que se llama en cada evento de inserción y actualización, escribimos la hora actual en el campo actualizado (creándolo o sustituyéndolo). Si el documento aún no contiene creado asumimos que es el primer cambio en el documento, por lo que añadimos creado que contiene también la hora actual. Después de ampliar el documento con los nuevos atributos, lo escribimos de nuevo en el bucket de origen para el mismo ID de documento.

Cambiando actualizado y creado generamos nuevos cambios en el documento. El marco de Eventing suprime la recursión al no propagar estos cambios a nuestra función. De lo contrario, estos cambios se gestionan de forma normal: se replican, indexan e incluso se propagan a otras funciones de Eventing.

Invocación de funciones externas con cURL

Las funciones de eventos pueden interactuar con sistemas externos utilizando rizo para llamar a su API REST. La posibilidad de interactuar con sistemas externos abre un montón de nuevos casos de uso, como la propagación de cambios de datos a otros sistemas, la notificación a la aplicación de eventos interesantes, el enriquecimiento de documentos con datos de sistemas externos, etc. Una vista previa de la función curl ya estaba disponible en versiones anteriores de Couchbase, pero con 6.5 la función se ha rediseñado para hacerla fiable y segura: las llamadas cURL se limitan a un conjunto predefinido de enlaces URL, para cada enlace podemos especificar autenticación, cifrado y validación de certificados según sea necesario.

En el siguiente ejemplo definiremos una aplicación a la escucha de los cambios en el bucket viaje-muestra. Guarde el código de la aplicación en el archivo app.js:

La aplicación define un punto final /api/aerolínea para recibir notificaciones sobre cambios en los datos de la aerolínea como peticiones POST con el cuerpo conteniendo el ID de la aerolínea. La aplicación está configurada con autenticación básica esperando que el usuario couchbase con la contraseña contraseña.

Ejecuta los siguientes comandos para instalar los paquetes node.js necesarios y ejecutar la aplicación:

Ahora vamos a crear una Función Eventing que notifique a nuestra aplicación sobre los cambios de los documentos de las aerolíneas. Todas las APIs externas que pueden ser llamadas por la función deben ser declaradas como URL bindings. Asumiendo que 192.168.61.1 es la IP de la máquina donde iniciamos la aplicación, declaramos un URL binding para la URL http://192.168.61.1:3000/api y ponerle un nombre notifyApi.

Un enlace URL puede utilizar el protocolo http o https. También podemos especificar diferentes tipos de autenticación y habilitar cookies para evitar la autenticación repetida. En nuestro caso, seleccionamos la autenticación básica con el usuario couchbase y contraseña contraseña.

En el siguiente paso proporcionar el código de la función, que escucha a los cambios de los documentos de tipo aerolínea y reenvía estos cambios a la aplicación mediante rizo llamadas:

En rizo toma tres parámetros: el método de la petición HTTP, el enlace URL y el objeto de la petición que puede contener los siguientes atributos:

    • ruta especifica la ruta secundaria del enlace URL. En nuestro ejemplo, añadimos /línea aérea para hacer una llamada a http://192.168.61.1:3000/api/airline
    • el cuerpo de la petición HTTP. El objeto proporcionado se codificará y marshaled como una cadena JSON, a menos que se especifique lo contrario por la directiva codificación atributo
    • parámetros contiene pares clave-valor que se pasarán como parámetros de petición HTTP
    • cabeceras contiene pares clave-valor que se pasarán como cabeceras HTTP adicionales.

El objeto de respuesta devuelto por rizo contiene el estado, el cuerpo y las cabeceras de la respuesta HTTP. La función lanza excepciones en caso de varios errores como URL inalcanzable o parámetros inválidos. Envuelve la llamada dentro de un bloque try-catch si necesitas registrar esos errores.

Después de crear la función, vuelva a la pestaña Eventing y despliegue la función NotificarCambios. Si opta por alimentar todo el contenido de los cubos, se notificará a la aplicación acerca de todos los ya existentes aerolínea documentos y registrarán sus identificaciones.

Pausar y reanudar una función

Una función Eventing en ejecución puede detenerse y reanudarse posteriormente. Cuando se reanuda, la función continúa procesando los eventos en el punto en el que se detuvo. El código y la configuración de una función en pausa pueden modificarse, de modo que cuando se reanude, los eventos posteriores se procesarán con la nueva versión de la función.

Esta función es especialmente útil para mantener funciones de Eventing que ya están en producción. La definición de la función puede mejorarse con nuevas funcionalidades o ajustarse tras cambiar el modelo de datos. Sin embargo, dichos cambios de código a mitad de vuelo deben ser compatibles con cualquier devolución de llamada de temporizador pendiente programada por el manejador

Por ejemplo, si para modificar el código de nuestro NotificarCambios busque la función en la vista de eventos y haga clic en su icono Pausa botón:

Espera hasta que la función se muestre como pausada, lo que significa que ha dejado de procesar los eventos. En ese estado, podemos modificar su código y configuración. Después de realizar las modificaciones necesarias, podemos reanudar la función.

La función se volverá a desplegar con la nueva implementación y continuará procesando los eventos en el punto en el que se detuvo.

Recursos

Descargar

Descargar Couchbase Server 6.5

 Documentación

Notas de la versión de Couchbase Server 6.5

Novedades de Couchbase Server 6.5

Blogs

Blog: Anuncio de Couchbase Server 6.5 - Novedades y mejoras

Blog: Couchbase lleva las transacciones distribuidas multidocumento ACID a NoSQL

Todos los blogs de 6.5

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Vaidas Gasiunas, Arquitecto de soluciones, Couchbase

Vaidas Gasiunas es Arquitecto de Soluciones en Couchbase Alemania, ayudando a los clientes de la región a adoptar Couchbase para sus casos de uso. Vaidas tiene muchos años de experiencia en la arquitectura y el desarrollo de sistemas de bases de datos centrados en la escalabilidad y la optimización del rendimiento.

1 Comentarios

  1. ashishmishra037@gmail.com marzo 14, 2021 a 7:21 pm

    Hola, ¿disponemos de la funcionalidad para identificar las modificaciones que se han producido en el documento?

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.