Content Based Routing with BRE and ESB
- by Christopher House
I've been working with BizTalk 2009 and the ESB toolkit for the past couple of days. This is actually my first exposure to ESB and so far I'm pleased with how easy it is to work with.
Initially we had planned to use UDDI for storing endpoint information. However after discussing this with my client, we opted to look at BRE instead of UDDI since we're already storing transforms in BRE. Fortunately making the change to BRE from UDDI was quite simple. This solution of course has the added advantage of not needing to go through the convoluted process of registering our endpoints in UDDI.
The first thing to remember if you want to do content based routing with BRE and ESB is that the pipleines included in the ESB toolkit don't include disassembler components. This means that you'll need to first create a custom recieve pipeline with the necessary disassembler for your message type as well as the ESB components, itinerary selector and dispather.
Next you need to create a BRE policy. The ESB.ContextInfo vocabulary contains vocabulary links for the various items in the ESB context dictionary. In this vocabulary, you'll find an item called Context Message Type, use this as the left hand side of your condition. Set the right hand side to your message type, something like http://your.message.namespace/#yourrootelement. Now find the ESB.EndPointInfo vocabulary. This contains links to all the properties related to endpoint information. Use the various set operators in your rule's action to configure your endpoint.
In the example above, I'm using the WCF-SQL adapter.
Now that the hard work is out of the way, you just need to configure the resolver in your itinerary.
Nothing complicated here. Just select BRE as your resolver implementation and select your policy from the drop-down list. Note that when you select a policy, the Version field will be automatically filled in with the version of your policy. If you leave this as-is, the resolver will always use that policy version. Alternatively, you can clear the version number and the resolver will use the highest deployed version.