SAP CAP + RabbitMQ: Cómo hacer que tu backend hable con colas de mensajes
¿Desacoplar CAP? ¿Que en vez de peticiones directas, se manden mensajitos por una cola y así evitar cuellos de botella? Pues hoy te voy a contar cómo integrar SAP CAP con RabbitMQ, una de las soluciones de mensajería más usadas en el mundillo. ¿Qué vamos a montar? Un proyecto SAP CAP (Node.js) Un servidor RabbitMQ local o en Docker Una integración para enviar mensajes desde CAP a una cola en RabbitMQ Opcional: un consumer para leer esos mensajes (porque está guay ver qué se recibe). Requisitos previos Node.js instalado Docker (para RabbitMQ) Proyecto CAP creado (cds init sap-cap-rabbitmq) Cliente AMQP para Node.js (usaremos amqplib) npm install amqplib Levantando RabbitMQ con Docker Si no tienes un RabbitMQ montado, en 5 segundos lo tienes: docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management La consola de administración estará en: http://localhost:15672 Usuario: guest / Contraseña: guest Integrando SAP CAP con RabbitMQ Vamos a crear un servicio en CAP que envíe mensajes a RabbitMQ. Crea un módulo JS para la conexión /srv/cat-service.js const cds = require('@sap/cds'); const amqp = require('amqplib'); module.exports = cds.service.impl(async function () { this.on('sendMessage', async (req) => { const { queue, message } = req.data; try { // Conectar a RabbitMQ const connection = await amqp.connect('amqp://localhost'); const channel = await connection.createChannel(); await channel.assertQueue(queue, { durable: false }); console.log(`

¿Desacoplar CAP? ¿Que en vez de peticiones directas, se manden mensajitos por una cola y así evitar cuellos de botella? Pues hoy te voy a contar cómo integrar SAP CAP con RabbitMQ, una de las soluciones de mensajería más usadas en el mundillo.
¿Qué vamos a montar?
- Un proyecto SAP CAP (Node.js)
- Un servidor RabbitMQ local o en Docker
- Una integración para enviar mensajes desde CAP a una cola en RabbitMQ Opcional: un consumer para leer esos mensajes (porque está guay ver qué se recibe).
Requisitos previos
- Node.js instalado
- Docker (para RabbitMQ)
- Proyecto CAP creado (cds init sap-cap-rabbitmq)
- Cliente AMQP para Node.js (usaremos amqplib)
npm install amqplib
Levantando RabbitMQ con Docker
Si no tienes un RabbitMQ montado, en 5 segundos lo tienes:
docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management
La consola de administración estará en: http://localhost:15672
Usuario: guest / Contraseña: guest
Integrando SAP CAP con RabbitMQ
Vamos a crear un servicio en CAP que envíe mensajes a RabbitMQ.
- Crea un módulo JS para la conexión /srv/cat-service.js
const cds = require('@sap/cds');
const amqp = require('amqplib');
module.exports = cds.service.impl(async function () {
this.on('sendMessage', async (req) => {
const { queue, message } = req.data;
try {
// Conectar a RabbitMQ
const connection = await amqp.connect('amqp://localhost');
const channel = await connection.createChannel();
await channel.assertQueue(queue, { durable: false });
console.log(`