Messi, Procesando Mensajes en C# (1)

Published on Author lopez

Ya tengo escrito un procesador de mensajes inspirado en las ideas de Mule, en C#:

https://github.com/ajlopez/SharpBus

Así como uno escrito en JavaScript inspirado en las mismas ideas:

https://github.com/ajlopez/SimpleMule

En este año entré en contacto con la implementación Apache Camel, de los patrones de proceso de mensajes clásicos. Para practicar TDD (Test-Driven Development) y diseño evolutivo, comencé a escribir algo parecido, en C#:

https://github.com/ajlopez/Messi

Lo interesante en C# es la disponibilidad de lambdas desde el vamos, con lo que un procesamiento de un mensaje, una parte en una serie de pasos a ejecutar sobre un mensaje entrante, puede ser una simple lambda, no hace falta construir un objeto completo. Lo mismo para un transformador de mensaje, un filtro, etc.

Quiero explorar la creación de un DSL (Domain Specific Language) interno, en C#. No parece complicado, sólo tener en claro la separación entre una Route, ruta de mensaje, y una RouteDefinition, quien defina la ruta usando verbos de un DSL. No quiero implementar la definición de rutas en XML o lenguajes externos, me parece más interesante y acorde a los tiempos, definir las rutas mediante código.

Recordemos: la idea es tener proveedores de mensajes entrantes, que luego pasan por una serie de pasos, la ruta de proceso. Esos mensajes entrantes luego pueden ser enviados a otros sistemas, rutas, etc. Mientras, pueden ser procesados: hay procesadores de mensajes, que toman un mensaje y lo devuelve intacto, pero por ejemplo, disparan alguna acción de negocio. O transformadores de mensajes, que toman al mensaje entrante y lo transforman/enriquecen. Y hay pasos que filtran mensajes, los dejan pasar o no, o los “rutean”, los envían por una ruta o por otra, de acuerdo a alguna decisión. Cada mensaje tiene un “payload”, contenido, y “headers”, propiedades asociadas.

Veremos como evoluciona el sistema desde los mini-casos de uso sencillos que voy planteando.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez