For the impatient, here are two config snippets. The first one is the in-the-box “baseConfig” that maps the built-in handlers into a config fragment that can be reused by all configuration files via import:
<?xml version="1.0"?><fabriq xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" configuration="baseConfig" version="1.0" xmlns="urn:fabriq-europe-microsoft-com:2004-06:fabriq-configuration"> <handlerType name="fabriqMessageForwarderType" class="Microsoft.Fabriq.Core.FabriqMessageForwarder, Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb" /> <handlerType name="fabriqMessageMapperType" class="Microsoft.Fabriq.Core.FabriqMessageMapper, Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb" /> <handlerType name="fabriqContentRouterType" class="Microsoft.Fabriq.Core.FabriqContentRouter, Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb" /> <handlerType name="fabriqTrackerHandlerType" class="Microsoft.Fabriq.Core.FabriqTrackerHandler, Microsoft.Fabriq.Core, Version=1.0.4173.0, Culture=neutral, PublicKeyToken=870ce73bfd71a8eb" /> <pipelineType name="fabriqTrackerPipelineType"> <endpoint/> <handler type="fabriqTrackerHandlerType" /> </pipelineType> <pipelineType name="fabriqSimplePipelineType"> <endpoint/> <handler type="fabriqMessageForwarderType" /> </pipelineType> <nodeType name="fabriqTrackerNodeType"> <actions> <action name="anyMessage" match="*"> <input> <message type="xsd:anyType" /> </input> <pipeline type="fabriqTrackerPipelineType" /> </action> </actions> </nodeType> <nodeType name="fabriqSimpleNodeType"> <actions> <action name="anyMessage" match="*"> <input> <message type="xsd:anyType" /> </input> <pipeline type="fabriqSimplePipelineType" /> </action> </actions> </nodeType></fabriq>
This simple configuration file builds on those base definitions for a very simple network with two nodes:
<?xml version="1.0" ?><fabriq xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" configuration="twoSimpleNodes" version="2.15" xmlns="urn:fabriq-europe-microsoft-com:2004-06:fabriq-configuration"> <import location="baseConfig.xml" /> <network name="twoSimpleNodes"> <node host="*" name="FirstNode" type="fabriqSimpleNodeType"> <ports> <wsa:EndpointReference xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing"> <wsa:Address>msmq://localhost/private$/fabriqport/twoSimpleNodes/FirstNode</wsa:Address> </wsa:EndpointReference> </ports> <output> <route to="*"> <destination priority="1"> <wsa:EndpointReference xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing"> <wsa:Address>fabriq://twoSimpleNodes/SecondNode</wsa:Address> </wsa:EndpointReference> </destination> </route> </output> </node> <node host="*" name="SecondNode" type="fabriqSimpleNodeType"> <ports> <wsa:EndpointReference xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing"> <wsa:Address>msmq://localhost/private$/fabriqport/twoSimpleNodes/SecondNode</wsa:Address> </wsa:EndpointReference> </ports> <output> <route to="*"> <destination priority="1"> <replyTo/> </destination> </route> </output> </node> </network></fabriq>A quick lap around this particular config:
· Defines two nodes fabriq://twoSimpleNodes/FirstNode and fabriq://twoSimpleNodes/SecondNode
· Both nodes will be hosted at any host that processes this config (node/@host=‘*’)
· The primary transport address for both nodes is set to be a private MSMQ queue named “private$/fabriqport” hosted on the local machine (ports section). So this network is really designed to run on just a single box.
· Both nodes use the “fabriqSimpleNodeType” from the imported “baseConfig” definition. That nodeType accepts any message with any action and runs it through the “fabriqMessageForwarderType” handler (which merely maps wsa:MessageID to wsa:RelatesTo)
· fabriq://twoSimpleNodes/FirstNode routes any resulting message to fabriq://twoSimpleNodes/SecondNode using a logical URI. That’s then internally mapped to the preferred transport address that fabriq://twoSimpleNodes/SecondNode declares for itself in its <ports> section.
· fabriq://twoSimpleNodes/SecondNode routes any resulting message to the wsa:ReplyTo destination contained in the original message that was submitted from the outside to fabriq://twoSimpleNodes/FirstNode. The ReplyTo header is carried through the entire network until such a <replyTo> destination is reached. That’s FABRIQ’s concept of getting back to the sender.