Have you ever found yourself in a position where you needed to understand how a particular BizTalk solution works? And to make matters worse, the majority of the solution is implemented based on content-based routing?
Routing Messages in BizTalk Server
So first, what is this: Content-Based routing?
Don’t get me wrong the definition that I will provide because there are several Message Routing Patterns that you can implement in BizTalk Server. For example, you can implement in BizTalk Server a:
But the reality is that in BizTalk Server:
- a message is always composed by the message itself and the metadata associated with it;
- the architecture is based on Publish and Subscribe;
So in his essence, the subscriber will subscribe to the messages based on Content-Based Routing.
And you may say: yes, but I can route a message without examining is content.
And you are right. The problem is the default definition of this pattern:
- As the names describe, Content-Based Router examines the message content and routes the message onto a different channel based on data contained in the message. For example, routing a message based on specif values of specif fields, or based on some criteria like existing fields.
However, as I told you before, a message in BizTalk Server is always composed by the message itself and the metadata associated with it. And for that reason, you may found other variations or other names like:
Routing: Context-Based Routing is similar to the previous
one, but instead of analyzing the content of the message, it will analyze the
metadata of the message. This information, in BizTalk Server, is normally
created on the receive port by the adapter and pipelines.
- Remember that I can promote messages to the context of the message and route them;
Routing: that is normally defined when:
- a message is
routed by BizTalk only based on the message type;
- But this is metadata associated in the message, and you need to inspect the message to get is type;
- or in pass-thru
scenarios when you are just redirecting the message to other systems, i.e.,
BizTalk is a broker and don’t “touch” or modify the message;
- But these filters are also associated with metadata of the message;
- a message is routed by BizTalk only based on the message type;
The problem of managing these solutions
If you have found yourself managing solutions, that majority is implemented with content-based routing, which is usually associated with not using orchestrations. You know that is not easy to understand the solution:
- What ports are subscribing
to the messages?
- In which conditions?
- In which application?
But that’s not all. Even worse if you have orchestrations using filters based on the content/context of the message in the activation.
This kind of analyze is hard because BizTalk Server Administration Console doesn’t provide an easy way out-of-the-box for you to see these subscriptions for example in a central place or in a visual diagram like:
This picture is actually from BizTalk360 Graphical Message Flow, but it serves well here as prof-of-concept.
The default solution
So the default solution that you have out-of-the-box with the product is to query the subscription from the BizTalk Server Administration Console by:
- In the console tree, expand BizTalk Server Administration, and then click the BizTalk group.
- In the details pane, click the New Query tab.
- In the Query Expression group, in the Value column, select Subscriptions from the drop-down list box.
But then you need to go one by one and see what the filters are.
You can minimize this by filtering more the query using the following filters:
- Maximum Matches: The number of matches to display.
- Service Instance ID: You can filter subscriptions by service instance ID.
- Service Name: You can filter subscriptions by service name.
- Subscription Type: You can filter subscriptions by Activation Subscription or Instance Subscription.
But that will not solve all your problems also. In conclusion, this is a hard and time-consuming task.
And sometimes what I need is just to have a quick overview of all these filters.
BizTalk Filter Finder Tool
“BizTalk Filter Finder Tool” is a simple tool that aims to simplify the process for better understand and maintain solutions based on content-based routing. By allowing you to have a quick overview of all the artifacts, send ports or orchestrations that have filters associated.
This tool will extend default BizTalk Server capabilities transforming this tedious and sometimes complicate analyze a little simple, easy and fast.
It way not be an amazing tool; it may not be beautiful but for me is a timesaver tool.
Credits also to my team member at DevScope, Pedro Almeida that collaborated with me in the development of this tool.
You can download BizTalk Filter Finder Tool from:
BizTalk Filter Finder Tool