A simple FABRIQ config file
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.