Recordando Fabriq

Published on Author lopezLeave a comment

En estas semanas, estuve estudiando el código del proyecto Fabriq. Es un proyecto .NET de hace unos años, pueden bajarse el código desde este post de Arvindra Shemi:

FABRIQ has gone public!

Más información sobre el proyecto original:

Arvindra Shemi Fabriq Articles
Clemens Vasters Fabriq Articles

Una imagen de la documentación:

Según la documentación del proyecto:

FABRIQ is an infrastructure for constructing networks of nodes processing and relaying messages. These nodes are hosted in machines running into a serviced application.

Uno puede tener varias máquinas ejecutando una o varias aplicaciones. La “red” es la aplicación, un node es una colección de acciones, y cada acción procesa un mensaje. Más de la documentación:

These nodes can be hosted in any distribution on several machines according to a defined configuration, so there may be machines running a single node or several nodes, this association are made by specifying the host-name or machine identification associated with each node in the network.

Each of these machines is running a serviced application responsible for starting and stopping its Host and Nodes which are the application main components. The host is responsible for handling the configuration, loading and unloading nodes and receives the messages and delivers them to the appropriate Node.

Un post interesante que va al núcleo del problema:

Positioning FABRIQ – What? Why? Apple or Orange?

Otros artículos más técnicos:

FABRIQ Terminology
A simple FABRIQ config file
FABRIQ Message Handlers and Pipelines
FABRIQ Networks and Nodes
Configuring FABRIQ Networks and Nodes

Creo que todas estas características pueden ser reimplementadas usando las tecnologías .NET actuales, y con un poco de trabajo, en Java (el proyecto publicado usa .NET 1.x, y hostea bajo COM). En .NET podemos usar Windows Communication Foundation, o los nuevos servicios distribuidos aportados por el Microsoft Robotics (DSS).

Con WCF, el mensaje a intercambiar y procesar podría ser de la clase System.ServiceModel.Channel.Message. Otra idea podría ser tener una clase propia Message, que pueda ser serializable con diferentes transportes: WCF, DSS, Remoting, Web Services, otras.

Estoy trabajando en reescribir desde cero la idea de Fabriq, con configuración dinámica, balanceo de carga, usando WCF u otra tecnología de base. He traido algunas ideas de mi viejo proyecto AjServer:

Hacia el AjServer 

Un avance de lo que estoy haciendo, un archivo de configuración:

 

<?xml version="1.0" encoding="utf-8" ?> <AjMessages> <Application Name="AjMessages"> <Node Name="Administration"> <Handler Name="ConfigureHandler" Type="AjMessages.ConfigureHandler, AjMessages"/> <Handler Name="PrintHandler" Type="AjMessages.PrintHandler, AjMessages"/> <Handler Name="PrintMessageHandler" Type="AjMessages.PrintMessageHandler, AjMessages"/> <Handler Name="ConfigurePipeline"> <Handler Name="PrintHandler"> <Property Name="Text" Value="Reconfiguring server..."/> </Handler> <Handler Name="PrintMessageHandler"/> <Handler Name="ConfigureHandler"/> </Handler> <Action Name="Configure" Handler="ConfigurePipeline"/> </Node> </Application> <Application Name="App1"> <Node Name="Node1"> <Handler Name="PrintMessageHandler" Type="AjMessages.PrintMessageHandler, AjMessages"/> <Handler Name="PostHandler" Type="AjMessages.PostHandler, AjMessages"/> <Handler Name="DecrementHandler" Type="AjMessages.ManualTest02.DecrementHandler, AjMessages.ManualTest02"/> <Handler Name="Pipeline1"> <Handler Name="PrintMessageHandler"/> <Handler Name="DecrementHandler"/> <Handler Name="PostHandler"> <Property Name="Action" Value="App2/Node1/Process"/> </Handler> </Handler> <Action Name="Process" Handler="Pipeline1"/> </Node> <Node Name="Node2"/> </Application> <Host Name="Host1" Address="http://localhost:50000/AjMessages"> <Application Name="AjMessages"> <Node Name="Administration"/> </Application> <Application Name="App1"> <Node Name="Node1"/> <Node Name="Node2"/> </Application> </Host> </AjMessages>

Tengo una versión andando, con WCF y sin WCF. Espero postear algo sobre el tema en estos días.

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

Leave a Reply

Your email address will not be published. Required fields are marked *