Ejemplo
La integración de herramientas de automatización como n8n en entornos .NET
ofrece una forma sencilla, extensible y visual de orquestar flujos entre microservicios. En este artículo aprenderás a:
-
Instalar n8n localmente con Docker.
-
Exponerlo en
localhost:5678
. -
Crear un flujo (
HTTP Trigger ➝ Webhook a un servicio .NET ➝ Respuesta dinámica
). -
Usarlo como puente entre servicios:
.NET → n8n → .NET
.
Paso 1: Instalar n8n con Docker en Localhost
Primero, asegúrate de tener Docker instalado. Luego, lanza el siguiente contenedor para exponer n8n en http://localhost:5678
.
docker run -it --rm \
-p 5678:5678 \
-e N8N_BASIC_AUTH_ACTIVE=true \
-e N8N_BASIC_AUTH_USER=admin \
-e N8N_BASIC_AUTH_PASSWORD=admin123 \
-e N8N_HOST=localhost \
-e N8N_PORT=5678 \
-v ~/.n8n:/home/node/.n8n \
n8nio/n8n
Si te diera error debes lanzar desde tu linea de comandos (usando linux):
mkdir -p ~/.n8n
sudo chown -R 1000:1000 ~/.n8n
Accede vía navegador a: http://localhost:5678, y sigue los pasos hasta que tengas disponible la aplicación:

Paso 2: Crear un flujo en n8n
- Crea un nuevo workflow.
-
Añade un nodo
HTTP Trigger
:-
Método:
GET
-
Path:
/webhook/test-flow
-
-
Añade un nodo
HTTP Request
:-
Método:
GET
-
URL:
http://host.docker.internal:5000/api/backend
-
Nota:
host.docker.internal
permite que n8n (en Docker) acceda a tu host Windows/Mac.
-
-
Conecta ambos nodos.
-
Guarda y activa el flujo.

Este sería el workflow:

Y lo activamos:


Paso 3: Servicio .NET de prueba
Vamos a crear dos endpoints .NET
:
Servicio 1: Simula una llamada a n8n
// http://localhost:5000/api/sayhello
[HttpGet("sayhello")]
public IActionResult SayHello()
{
var client = new HttpClient();
var response = client.GetAsync("http://localhost:5678/webhook/test-flow").Result;
var content = response.Content.ReadAsStringAsync().Result;
return Ok($"Respuesta de n8n: {content}");
}
Servicio 2: Recibe la segunda llamada desde n8n
// http://localhost:5000/api/backend
[HttpGet("backend")]
public IActionResult Backend()
{
return Ok("Hola desde el servidor .NET Backend");
}
Paso 4: Prueba de la integración completa
-
Abre un navegador o usa Postman para llamar al primer servicio .NET:
http://localhost:5000/api/sayhello
-
Este servicio llamará al
HTTP Trigger
de n8n (/webhook/test-flow
). -
n8n reenviará la petición al segundo servicio
.NET
(/api/backend
). -
La respuesta viajará de vuelta a través de n8n → servicio inicial → cliente.
Resultado esperado:
«Respuesta de n8n: Hola desde el servidor .NET Backend»

Y para terminar si quieres ver el estado de la que salió bien:

Más cosas
Dejemos de rascar la superficie: n8n vs Logic Apps a nivel de lógica
Funcionalidad | Azure Logic Apps | n8n |
---|---|---|
Condicional simple (if ) |
Sí (bloque Condition ) |
Sí (IF node o Set → Expression + ruta condicional) |
Condicional múltiple (switch ) |
Sí (bloque Switch con cases y default ) |
Sí (Switch node con múltiples ramas) |
Bucles (foreach , while ) |
Sí (ForEach , Until ) integrados |
Sí (nodos SplitInBatches , Loop con IF /Set combinados) |
Evaluación booleana compleja | Sí (expresiones con @and , @or , @greater , etc.) |
Sí (expressions con JS en campos como {{$json["key"] > 5}} ) |
Expresiones y lenguaje | Lenguaje propio basado en Workflow Definition Language (WDL) | JavaScript en expresiones ({{$json["prop"] + 1}} , {{$now}} ) |
Acceso a variables de contexto | Sí, mediante @triggerOutputs()?['body/value'] |
Sí, mediante {{$json["key"]}} , {{$node["X"].json["value"]}} |
Scope y manejo de errores por bloque | Sí (bloques Scope , Try/Catch , Run After ) |
Parcial (se puede simular Try/Catch con ramas + control manual) |
Paralelismo y ejecución condicional | Sí (puedes paralelizar ramas, runAfter , control de errores) |
Sí (puedes paralelizar nodos, usar IF , manejar errores) |
Reintentos, timeout, fallbacks | Nativo por acción: política de reintentos, timeout, fallback | Parcial (reintentos configurables por nodo, o usando Error Trigger ) |
Persistencia de estado / resumible | Sí, totalmente gestionado por Azure | No (en local o self-hosted necesitas persistencia propia) |
Diseño declarativo vs visual | Declarativo en JSON + diseñador visual en portal Azure | 100% visual (drag & drop) con expresiones JS |
Complejidad creciente mantenible | Difícil (bloques anidados crecen mucho) | Más flexible (puedes modularizar con sub-flujos, folders, etc.) |
Escalabilidad en n8n vs. Azure Logic Apps
Característica | n8n | Azure Logic Apps |
---|---|---|
Modelo de ejecución | Self-hosted o cloud (n8n.io) | Serverless gestionado 100% por Azure |
Escalado horizontal automático | No nativo. Requiere clúster (ej. Docker Swarm, Kubernetes, etc.) | Sí. Escalado automático gestionado por Azure |
Alta disponibilidad (HA) | Necesita configuración activa (K8s, Redis queue, DB externa) | Inherente al modelo serverless |
Colas y concurrencia | Redis o PostgreSQL para workflows distribuidos | Nativo con control de concurrencia y ejecución paralela |
Ejecución en paralelo | Sí, con workers y triggers escalados | Sí, múltiples instancias en paralelo |
Persistencia y reanudación tras fallo | Limitada en self-hosted (puede perder estado si no se configura bien) | Azure mantiene el estado y puede reanudar flujos automáticamente |
Tolerancia a errores / reintentos | Parcial (requiere configuración por nodo o lógica adicional) | Completa (configurable por acción, con runAfter , retries, timeouts) |
Tiempo de arranque (cold start) | Inmediato (si está en ejecución continua) | Puede tener latencia si el plan es Consumption |
Seguridad y gobernanza empresarial | Depende de tu infraestructura y procesos | Nativo con Azure Policy, RBAC, DLP, etc. |
Multi-tenant / segregación de entornos | Necesita instancias por entorno o uso de workspaces (solo SaaS Pro) | Integrado (RG, entornos, slots, etc.) |
Monitoreo y logging | Requiere herramientas externas (Prometheus, Loki, Datadog, etc.) | Integrado con Application Insights, Log Analytics, Alerts |
Backup y restore de workflows | Manual (export JSON, uso de Git, DB backups) | Versionado automático en Logic Apps Standard con GitHub/Azure DevOps |
Escalabilidad coste-eficiente | Muy buena si es bien gestionado (especialmente en uso intensivo) | Costes imprevisibles si hay muchos triggers/eventos/fallos |
¿Cuándo usar cada uno?
Caso | Recomendación |
---|---|
Flujos críticos con SLA y HA garantizado | Azure Logic Apps |
Integración rápida en Azure con conectores nativos | Azure Logic Apps |
Workflows internos con lógica personalizada compleja | n8n |
Casos on-prem o air-gapped | n8n self-hosted |
Entornos con infraestructura DevOps madura (K8s, GitOps) | n8n escalado |
Casos donde el coste de eventos Azure es prohibitivo | n8n |
Necesidad de lógica visual + scripting JS flexible | n8n |
Complejidad y costes ocultos de usar n8n en entornos reales
Aunque n8n se presenta como una alternativa open-source, visual y ligera para orquestación, cuando das el salto de probarlo en localhost a mantenerlo en producción, aparecen desafíos que deben considerarse cuidadosamente.
Infraestructura: No todo es gratis
Elemento | Detalle |
---|---|
Servidor (VM o contenedor) | Necesitas un entorno estable, con alta disponibilidad y backups |
Base de datos | PostgreSQL recomendado (SQLite solo para pruebas) |
Cola de ejecución | Redis si quieres concurrencia real o workers distribuidos |
Almacenamiento seguro | Variables sensibles y credenciales se almacenan en plano si no se cifra |
Autenticación SSO / RBAC | No disponible en la edición OSS; solo en el plan Enterprise Cloud |
Seguridad y compliance
Tema | Detalles críticos |
---|---|
Cifrado de datos en reposo | No habilitado por defecto |
Auditoría de acciones | No disponible en OSS (sí en Enterprise) |
SSO y control granular de acceso | Solo en la versión empresarial |
Dependencia de plugins o nodos externos | Posibles riesgos si se usan integraciones de terceros no revisadas |
Monitorización y trazabilidad
Elemento | ¿Qué falta? |
---|---|
Observabilidad nativa | No tiene integración con Prometheus, Grafana o logs estructurados |
Histórico de ejecuciones | Sí, pero sin métricas agregadas o correlación con sistemas externos |
Alertas o dashboards | Debes integrarlo tú con herramientas externas |
Costes ocultos de usar n8n OSS
Categoría | ¿Qué implica? |
---|---|
Tiempo de despliegue | Infraestructura, seguridad, escalado, backups, CI/CD |
Tiempo de mantenimiento | Actualizaciones, dependencias, limpieza de flujos antiguos |
Coste en personal | Necesitas un DevOps y un responsable de plataforma |
Compliance adicional | Cifrado, SSO, control de cambios, trazabilidad |
Licencias opcionales | Si quieres soporte o seguridad avanzada, debes pagar por ello |
El problema: ejecución distribuida no controlada
Supongo que ya sabeis que me encantan los sistemas distribuidos y en n8n no dejaré de hablar de este tema.
n8n o es «stateless» por completo. Si despliegas múltiples pods de n8n sin configurar un sistema de colas y coordinación, puedes encontrarte con estos problemas:
Problema | Detalle |
---|---|
Race conditions | Dos pods intentan ejecutar el mismo webhook o flujo |
Estado perdido | Si una ejecución empieza en un pod y se reinicia/crashea, la ejecución se pierde si no hay persistencia bien montada |
Saltos entre pods | Un trigger entra por un pod y el siguiente paso se intenta ejecutar en otro, lo que no es posible en n8n sin workers |
Memoria compartida | Cada pod mantiene su propio runtime y contexto, no hay sincronización entre ellos |
Arquitectura escalable en K8s para n8n
Para que n8n
escale correctamente en entornos Kubernetes, es esencial diseñar una arquitectura basada en el modelo de ejecución distribuido con colas. Escalar verticalmente no tiene sentido en un entorno cloud-native: lo que nos interesa es aumentar capacidad horizontalmente de forma controlada, resiliente y sin duplicar flujos.

Componentes necesarios
Componente | Función clave |
---|---|
n8n Main Pod | Web UI, recepción de triggers (HTTP, cron…), coordinación general del flujo. |
PostgreSQL | Persistencia del estado de workflows, ejecuciones y configuración. |
Redis | Cola de trabajos para distribuir la ejecución entre múltiples workers. |
n8n Worker Pods | Procesan los flujos asincrónicamente, sin arrancar UI ni triggers. |
Modo Main
Este modo lanza UI + API + triggers: n8n start
Modo Worker
Solo ejecuta trabajos desde Redis: n8n worker
Configuración compartida (ej. values.yaml
, Deployment.yaml
, etc.)
N8N_QUEUE_MODE: "true"
QUEUE_MODE_REDIS_HOST: "redis-service"
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres-service
Asegúrate de que todos los pods comparten la misma base de datos PostgreSQL y el mismo Redis. No hagas réplicas sin coordinación.
¿Es obligatorio Redis y PostgreSQL para n8n?
Buena pregunta:
Componente | ¿Es obligatorio? | ¿Qué pasa si lo cambio? |
---|---|---|
PostgreSQL | Sí, en producción | Solo se admite SQLite en modo local o de pruebas. Otros motores no son soportados oficialmente. |
Redis | Sí, para queue mode (escalado horizontal) | Solo Redis es compatible con queue mode . No puedes usar RabbitMQ, Kafka, ni alternativas. |
n8n requiere una base de datos relacional persistente para guardar:
-
Workflows
-
Credenciales
-
Logs de ejecución
-
Usuarios
Opciones soportadas oficialmente:
Motor | Soporte | Comentario |
---|---|---|
PostgreSQL | Sí | Recomendado en todos los entornos |
SQLite | Parcial | Solo para pruebas locales |
MySQL / MariaDB / SQL Server | No | No soportados oficialmente |
MongoDB / NoSQL | No | n8n no es compatible |
Por tanto: en Kubernetes o cualquier entorno multi-pod, PostgreSQL es obligatorio. SQLite no es seguro porque no puede ser accedido por múltiples instancias concurrentemente.
Redis (Cola de ejecución)
Redis se usa en queue mode
, que es lo que permite que:
-
Un pod main reciba triggers.
-
Los jobs se encolen.
-
Múltiples pods worker ejecuten tareas de forma concurrente.
Alternativas como RabbitMQ, NATS, Kafka, etc. NO son compatibles.
n8n está diseñado específicamente con Redis como único backend de colas por ahora.
Conclusión
Si quieres escalar horizontalmente, usar workers y mantener consistencia entre pods, Redis + PostgreSQL es la única arquitectura soportada hoy.
Por tanto si estas en Azure y tienes que montar un PostgreSQL y una Redis, te obliga a meter otro coste oculto para cuando quieres trabajar en entornos distribuidos.
Nota sobre PostrgreSQL
Si no vas a distribuir n8n (es decir, no usas múltiples pods ni workers), podrías funcionar con una única instancia sin Redis, pero la base de datos PostgreSQL sigue siendo necesaria en producción.
¿Es obligatorio usar PostgreSQL en producción?
Sí, en la práctica es obligatorio usar PostgreSQL si:
-
Quieres un entorno estable y persistente en producción
-
Deseas recuperar workflows, ejecuciones, credenciales, usuarios tras reinicios
-
Usas
n8n
con Docker, Kubernetes o servidores reiniciables -
Planeas hacer backups, CI/CD o migraciones
¿Puedo usar SQL Server?
No. n8n no es compatible con SQL Server ni con MySQL, MariaDB, Oracle ni bases NoSQL.
n8n
utiliza TypeORM internamente, pero solo está oficialmente soportado y probado con PostgreSQL y SQLite.
Puntos clave de la licencia de n8n que debes tener en cuenta
No puedes usar RBAC, SSO, LDAP, audit logs ni workspaces multiusuario
-
Estas funcionalidades están exclusivamente disponibles en la edición Enterprise.
-
Si trabajas en una empresa que necesita control de accesos por roles, integración corporativa o trazabilidad de cambios: sí o sí necesitas pagar la licencia Enterprise.
No puedes ofrecer n8n como servicio SaaS a terceros usando la edición OSS
-
Si pones n8n a disposición de tus clientes para que creen o editen sus propios workflows, estás construyendo un servicio basado en n8n.
-
Esto viola la n8n Sustainable Use License, salvo que tengas un acuerdo comercial firmado con n8n GmbH.
Es decir: no puedes montar un portal donde los clientes gestionan flujos sin pagar la licencia Enterprise.
Puedes usarlo gratis si…
-
Solo lo usas internamente en tu empresa
-
No revendes n8n como producto o servicio
-
No necesitas funciones enterprise
-
Aceptas implementar tú mismo RBAC o control de cambios si te hace falta (vamos que te toca trabajar un poco más de lo que pensabas, otro coste oculto).
Me planteo un caso de uso (y sí, termino ya)
«Quiero montar en una instancia de n8n donde mis clientes entren y gestionen sus propios flujos (tipo ‘pinta y colorea’)».
¿Puedes hacerlo legalmente con la edición OSS?
No. No puedes hacerlo.Dar acceso a terceros (clientes) para que creen o editen workflows, aunque sea dentro de tu suscripción o infraestructura, se considera ofrecer n8n como servicio (SaaS), me he repetido, ya lo se.
Y eso requiere una licencia Enterprise y un contrato con n8n GmbH.
Entonces, ¿qué opciones tengo si quiero algo similar sin usar Zapier o herramientas cerradas… y sin caer en costes ocultos?
Aquí es donde la realidad se impone:
n8n OSS parece libre, pero cuando quieres hacer algo serio con múltiples usuarios, acceso externo, roles, auditoría o SSO, aparecen los costes ocultos.
Ya sabéis: primero te dan la herramienta gratis, y cuando estás enganchado… es cuando toca pasar por caja.
n8n OSS no es legal ni viable para ofrecer acceso a clientes sin pagar licencia Enterprise.
Azure Logic Apps sí lo permite, sin preocuparte por licencias, con:
-
Seguridad de nivel enterprise
-
SSO con Azure AD
-
Trazabilidad y logging integrado
-
Gobernanza clara y soporte legal
Si necesitas un entorno multiusuario gobernado, seguro y sin letra pequeña, Logic Apps es la opción correcta para escenarios B2B o SaaS.