Aplicaciones distribuidas con AjMessages usando DSS/CCR

Por ahora, es solo un proyecto en marcha. La aplicación de ejemplo es mínima. Pero es la evolución de mi trabajo anterior con AjMessages usando  Windows Communication Foundation:

AjMessages- a message processor
AjMessages- hacia un procesador de mensajes

El año pasado excribí ese ejemplo, y otro que usaba DSS/CCR. Solo el primero fue publicado, ahora, estuve revisando mi implementación con DSS/CCR, tecnologías que son la base de Microsoft Robotics. El código nuevo se puede bajar del repositorio de CodePlex en:

http://www.codeplex.com/ajmessages

Los ejemplos estan basados en ideas del proyecto Fabriq, ahora en nuevas tecnologías. En estos días, Arvindra Sehmi escribió sobre una nueva versión de Fabriq, llamada Fabriq4Dss, que está usando DSS/CCR como base. Preparó una presentación para la conferencia JAOO, lean:

JAOO 2008 Presentation

Espero que pronto aparezcan novedades sobre esa implementación y otras. Keep tuned!

La solución

Tiene tres proyectos:

El primero es la implementación del núcleo del sistema, que es independiente del transporte de los mensajes distribuidos:

El segundo proyecto contiene un ejemplo con un message handler que decrementa un entero. El tercer proyecto es un DSS Service Component que se usa para albergar el servidor de AjMessages en una máquina con un DSS Host:

 

Para una más detallada explicación de qué es una aplicación, mensaje, servidor, leer mis anteriores posts:

AjMessages- a message processor
AjMessages- hacia un procesador de mensajes

La aplicación

Un archivo de configuración XML define las aplicaciones a ejecutar. Una aplicación tiene:

  • Nodes: una colección de acciones a procesar (un nodo tiene varias acciones, podría ser análogo a clase/método).
  • Handlers: objetos que procesan mensajes. Un handler puede estar compuesto de otros handlers.
  • Actions: puntos con nombre para entrar a un handler

Un ejemplo de definición de aplicación en AjMessages.SampleApp\Configurations\Server1.xml:

<?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="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.SampleApp.Handlers.DecrementHandler, AjMessages.SampleApp"/> <Handler Name="Pipeline1"> <Handler Name="DecrementHandler"/> <Handler Name="PostHandler"> <Property Name="Action" Value="App1/Node1/Process"/> </Handler> </Handler> <Action Name="Process" Handler="Pipeline1"/> </Node> <Node Name="Node2"/> </Application> <Host Name="Server1" Activate="true"> <Application Name="AjMessages"> <Node Name="Administration"/> </Application> <Application Name="App1"> <Node Name="Node1"/> <Node Name="Node2"/> </Application> </Host> <Host Name="Server2" Address="http://localhost:50002/ajmessages/node"> <Application Name="AjMessages"> <Node Name="Administration"/> </Application> <Application Name="App1"> <Node Name="Node1"/> <Node Name="Node2"/> </Application> </Host> </AjMessages>


Ejecutando el ejemplo


Abrimos la solución en el Visual Studio 2008 (se necesita tener instalado un Microsoft Robotics Developer Studio, una versión CTP de este año, debe configurar el directorio de salida de los proyectos para que apunten a su directorio de MRDS). Al ejecutar el proyecto DSS se lanza un DSS Host, que muestra una ventana de control:



El host está ejecutando en las puertas 50000/50001. Configure el servidor AjMessages usando el archivo AjMessages.SampleApp\Configurations\Server1.xml.


Podemos lanzar un segundo host desde el prompt de DSS:


bin/dsshost /p:50002 /t:50003
m:<pathto>\Source\AjMessages.DssServices\AjMessagesDssServices.manifest.xml

Un segundo formulario aparece:


Use el archivo de configuración AjMessages.SampleApp\Configurations\Server2.xml y el port 50002.


Podemos enviar un mensaje a la aplicación de ejemplo (que ejecuta en dos hosts). El mensaje es solamente un entero, que es decrementado en cada proceso de acción en cada nodo. El nodo de decremento está instalado en ambos servidores, así que el mensaje viaja de uno a otro durante su proceso.


Próximos pasos


Quiero mejorar varios puntos. Me gustaría serializar cualquier tipo de mensaje, ahora solamente viajan enteros y strings. Me gustaría usar un solo archivo de configuración, en lugar de uno por máquina. Y poder tener en una sola solución, ambas implementaciones de hosting y transporte: DSS/CCR y WCF.


Nos leemos!


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

This entry was posted in 1389, 6148, 7337, 7747. Bookmark the permalink.

Leave a Reply

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


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>