La arquitectura asíncrona basada en eventos de Couchbase es el núcleo de su diseño. Las mutaciones de documentos fluyen continuamente hacia Couchbase Index, Analytics, Eventos y servicios de búsqueda.
Esta arquitectura garantiza que los servicios de Couchbase se actualizan en tiempo real y nos permite integrar Couchbase a la perfección en su arquitectura basada en eventos.
Esta entrada del blog demuestra cómo se puede integrar Couchbase con un corredor de eventos. En este post, utilizo el popular Agente de mensajes Solace PubSubpero la integración con otros productos de mensajería, como Kafka, es muy similar.
Arquitectura general
Couchbase puede interactuar con otros sistemas usando los SDKs de Couchbase y varios Couchbase Connectors, como el que tenemos para Kafka. Para esta integración, usamos un enfoque alternativo, Couchbase Eventing Service. El servicio de eventos te permite actuar rápidamente sobre los cambios (mutaciones) de tus datos activando funciones JavaScript. El servicio de eventos soporta cURL de forma nativa y te permite llamar a servicios REST externos directamente desde el receptor JavaScript.
Utilizamos esta capacidad para enviar datos a Solace PubSub+ utilizando su API de mensajería REST. Los mensajes se envían a un Solace Topic que sus suscriptores pueden consumir.
En esta integración, aplicamos un unidireccional POST a Solace, ilustrado en la siguiente figura. Aquí, la función Couchbase Eventing envía un HTTP POST con el documento en el cuerpo del mensaje al agente de eventos Solace PubSub+. El agente de eventos acusa recibo del mensaje con un HTTP 200 OK respuesta. El mensaje está ahora en manos del Solace Event Broker, donde los consumidores pueden suscribirse a los mensajes del Topic.
Figura 1. Las mutaciones de documentos en Couchbase activan un receptor de eventos que envía el documento a un tema de Solace a través de un HTTP POST. Los consumidores se suscriben al tema.
Solace puede procesar el mensaje, o los suscriptores pueden suscribirse al tema a través de JMS, MQTT y otros protocolos. En este post, utilizo un consumidor REST. Un microservicio puede consumir los mensajes proporcionando un punto final de devolución de llamada HTTP mediante la creación de un punto final de consumidor REST en Solace. El punto final de devolución de llamada se llama cuando un nuevo mensaje se añade al tema.
Ejemplo de solicitud
Para demostrarlo, hemos creado un escenario de ejemplo utilizando un conjunto de datos que viene de fábrica con Couchbase, el archivo viaje-muestra cubo.
En nuestro escenario de prueba, queremos publicar cualquier cambio en el archivo hotel a Solace. Como se muestra en esta figura, un microservicio se suscribirá y consumirá los cambios.
Las partes de la aplicación de muestra son:
- A Función de eventos de Couchbase se activa por cada mutación del hotel documentos. A continuación, la función de eventos enviará el hotel documento a un tema de Solace
- Corredor de eventos Solace que contiene la cola y el tema, así como la configuración de entrega REST
- A Consumidor REST suscrito al tema Solace
Requisitos previos
Estos tres requisitos previos son necesarios para seguir junto con la solicitud de muestra:
Couchbase 7 Enterprise Edition
Puedes ejecutar Couchbase como un clúster de un solo nodo sobre Docker en una máquina local.
Creamos un cluster Couchbase de un solo nodo para propósitos de desarrollo (los clusters de un solo nodo no se recomiendan para uso en producción). Incluye los servicios Eventing y Data cuando configures Couchbase en tu clúster de un nodo.
Nube de intermediarios de eventos Solace PubSub
Inscríbete gratis Prueba en la nube de Solace y cree un Servicio/VPN. Configuraremos la VPN más adelante en las instrucciones.
Consumidor REST
Necesitamos un punto final HTTP que acepte HTTP POST peticiones. Dado que utilizamos Solace PubSub+ Cloud, el consumidor REST debe ser accesible desde Internet.
En lugar de alojar su propio consumidor REST, puede utilizar un servicio gratuito (como Beeceptor) que le permita recibir HTTP POST solicita y reconoce un HTTP 200 respuesta. Eso es todo lo que necesitamos para verificar que la integración funciona. Si planeas realizar pruebas más extensas, podrías escribir tu propio microservicio consumidor REST.
Para ello, vaya a Beeceptor.com y configure un nombre de endpoint. En este ejemplo, utilizo cbtest como punto final.
Captura la dirección del punto final: https://cbtest.free.beeceptor.comque se necesitará más adelante para configurar el punto final de recepción en Solace.
Configuración
Una vez establecidos los requisitos previos, es hora de configurar los distintos servicios de la aplicación de ejemplo.
Configuración de Solace
En primer lugar, tenemos que configurar Solace para crear el tema, la cola y el punto final de entrega REST correspondientes. Después de registrarse en la nube Solace, asegúrese de haber creado un Servicio/VPN.
Cada uno de los siguientes pasos se ilustra con una captura de pantalla para mostrar cómo debería ser su configuración a medida que avanza.
Configurar cola y tema
Vamos a configurar el Topic para que reciba los mensajes que enviamos desde el Servicio de Eventos de Couchbase.
En la interfaz administrativa de Solace, vaya a Colas/Puntos finales y crear un nuevo Punto final del tema llamado T/rest/pubsub utilizando la configuración predeterminada.
A continuación, vaya a Colas y crear una cola llamada Q/bolsa/entrada. Mantenga los valores por defecto.
Ahora abra el Q/bolsa/entrada en modo de edición y seleccione la opción Suscripciones pestaña. Añada un T/rest/pubsub suscripción temática al Q/bolsa/entrada cola.
Una vez creados la cola y el tema, el cliente REST puede suscribirse a ellos.
Ir a Conexiones de clientes y cambiar a la REST pestaña. Cree un nuevo Punto final de entrega REST con el nombre RDPCouchbase. Mantenga los valores por defecto y asegúrese de habilitar el nuevo endpoint.
Navegue hasta el endpoint recién creado y vaya a la sección Consumidores REST ficha.
Crear un nuevo Consumidor REST con el nombre demoConsumidor y active al consumidor.
Proporcione la dirección del host remoto para el servicio REST consumidor. Como se describe en el requisito previo, proporcione su propio punto final o cree un punto final de prueba gratuito en Beeceptor.
Configure el puerto remoto; nosotros utilizamos Beeceptor con el puerto 80 y mantenemos el resto de valores por defecto.
Navegue hasta el Enlaces de consulta en la pestaña RDPCouchbase REST y añada el enlace para la cola Q/couchbase/input creada recientemente. Añada el Objetivo de la solicitud de puesto, que corresponde a la ruta URL del receptor REST. Utilizo /callback.
Verificar la configuración REST de Solace
Para verificar que Solace está configurado correctamente y que los mensajes REST pueden ser consumidos por Solace así como enviados al cliente REST, ejecute el siguiente comando cURL:
1 2 3 4 5 |
rizo -v -X POST https://mrd3aaxn3oc4d.messaging.solace.cloud:9443/T/rest/pubsub \ -d "Hola Mundo REST" \ -H "tipo de contenido: texto" \ -H "Solace-delivery-mode: direct" \ --usuario solace-nube-cliente:g50ou1qos9ha0hauabrp0nn2ev |
Sustituye el nombre de host y las credenciales por la configuración de tu entorno.
Esto concluye la configuración de Solace. Ahora tenemos un tema que puede recibir mensajes y un suscriptor REST que proporciona una función de devolución de llamada.
Configuración de Couchbase
Con nuestro nodo Couchbase ejecutando los servicios Eventing y Data, podemos crear la función eventing.
Instale el viaje-muestra cubo de muestras (consulte la documentación aquí).
Crear un cubo llamado rr100 (para la relación residente 100%) y un ámbito denominado concurso. En este ámbito, cree una colección denominada metadatos.
rr100.eventing.metadata será utilizado por la función de eventos para almacenar sus metadatos.
En Couchbase, antes de la versión 7, tenías que crear un bucket dedicado para los metadatos. Con la versión 7 aprovechamos el soporte de ámbitos y colecciones para crear en su lugar una colección dedicada para la información de metadatos de eventing.
Vaya al servicio de eventos y cree una nueva función de eventos haciendo clic en Añadir función.
El receptor de eventos escucha el evento hotel colección en el inventario ámbito dentro del viaje-muestra cubo. Esto activará nuestro receptor de eventos cada vez que se modifique un documento dentro del bucket hotel mientras que los cambios en documentos de otras colecciones o buckets no se recogen.
El rr100.eventing.metadatos bucket se utiliza para almacenar los metadatos de las funciones de eventing.
En curlSolaceRestUrl especifica el alias de URL para el punto final REST de Solace receptor. Proporcione la URL completa, incluida la ruta URL, que representa el tema que creó durante la configuración de Solace. Por ejemplo https://mrd3aaxn3oc4d.messaging.solace.cloud:9443/T/rest/pubsub
El endpoint Solace requiere autenticación. Configuramos básico autenticación y proporcionar las credenciales.
(Nota: Hubo un error en Couchbase 7.0.X que puede perder la contraseña de tus credenciales cURL. Los problemas se pueden evitar volviendo a escribir la contraseña si editas la configuración de tu Eventing Function y realizas un "Guardar".)
Ahora podemos aplicar el OnUpdate() JavaScript con la configuración de eventos. Couchbase activará esta función para cualquier mutación de documento en el archivo hotel colección.
En este sencillo ejemplo, enviamos todas las mutaciones de documentos a Solace utilizando el soporte cURL en el Servicio de Eventos. En un caso de uso real, normalmente aplicaríamos un filtrado basado en algunos atributos del documento e implementaríamos la función OnDelete para gestionar la eliminación de documentos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
función OnUpdate(doc, meta) { // Mantenemos la función de eventos tan simple como sea posible con un manejo mínimo de errores. // Para cada mutación de documento, el documento se pasa a Solace usando un HTTP POST. pruebe { // construir la solicitud al punto final REST de Solace. var solicitar = { cuerpo: doc }; // realiza la petición cURL utilizando el alias URL 'curlSolaceRestUrl' de la configuración // El alias URL 'curlSolaceRestUrl' de la configuración contiene el host incluyendo la ruta al Tema en Solace var respuesta = rizo(POST, curlSolaceRestUrl, solicitar); si (respuesta.estado != 200) { registro("docId", meta.id, "cURL POST falló response.status:",respuesta.estado); } si no { registro("cURL POST exitoso, enviado", meta.id); } } captura (e) { registro("ERROR la petición cURL tuvo una excepción:",e) } } |
Probar la aplicación de ejemplo
Ahora es el momento de probar la aplicación de ejemplo:
- Inicie el evt_sendto_solace oyente de eventos
- Vaya a Documentos en la consola de Couchbase
- Seleccione viajes-muestra.inventario.hotel como se muestra aquí:
- Abrir un hotel editar cualquier campo del documento y guardar los cambios. Este cambio en el documento desencadenará un evento de actualización que nuestro receptor de eventos recogerá.
- El receptor de eventos enviará ahora el documento actualizado a Solace.
- Ahora podemos verificar que nuestro consumidor REST Solace ha recibido el documento actualizado. Observe que Solace envió el documento al consumidor REST utilizando el método /callback especificado durante la vinculación de la cola.
Las mutaciones del documento a los documentos del hotel en el hotel colección se publican ahora en Solace y luego se envían a los suscriptores de Solace.
Los servicios de Couchbase se basan en el Protocolo de Cambios de la Base de Datos (DCP), que soporta la visión consistente de tus datos. DCP no garantiza que veas todos los cambios, pero sí garantiza que veas los más recientes. Por ejemplo, si un documento en viaje-muestra
.inventory.hotel muta bastante rápido algunas de las mutaciones intermedias pueden ser deduplicadas por lo que el Servicio de Eventos no verá todos los cambios.
Gracias por acompañarme en esta demostración.
Conclusión
Este artículo nos enseñó a integrar Couchbase con el broker de eventos Solace usando el servicio Couchbase Eventing.
Vemos cómo Couchbase puede integrarse perfectamente en tu arquitectura basada en eventos. Ahora puedes aprovechar al máximo los aspectos de calidad de servicio de la plataforma Solace con mensajería garantizada y persistente.
La lógica de la función Eventing en nuestro ejemplo se limita a una petición POST cURL básica sin un manejo de errores adecuado. Usted querrá implementar lógica de error y reintento para una solución lista para la producción.
- Conozca el funcionamiento interno de Couchbase Eventing aquí
- Empieza con un prueba gratuita en la nube de Couchbase Capella
La llamada curl da como resultado el mensaje de error "La capacidad de realizar llamadas curl está deshabilitada". No se ha podido encontrar documentación sobre cómo habilitarla. La funcionalidad curl ya está habilitada en "Configuración -> Configuración de consultas -> Configuración avanzada de consultas -> Acceso a funciones curl". Esto es en Enterprise Edition 7.2.4 build 7070