In the last post I tacked about Splitter Pattern.Today we will continue with Message Filter Pattern. This pattern can be used with success with Windows Azure Service Bus.
As the name says, all the messages are filtered based on
specific rules. Any message that will reach the consumer will be filter based
on this rules. All the producers will use the same entry point where they will
add messages. They don’t have to know that messages are filtered based on same
rules. In this way, the message system will create a decoupling between the
producer and the consumer. This pattern is used to be able to control the
messages that where not routed to any subscriber.
Windows Azure Service Bus Topics can be used for this
purpose. It gives us the ability to define rules that can check the messages
content based on meta-information. These rules will be added to each subscriber
and will specify if the messages will be accepted or not.
SqlFilter myCustomFilter =
new SqlFilter("grade < 5");
namespaceManager.CreateSubscription(
"StudentsGradesTopic",
"StudentsWithProblemsSubscription",
myCustomFilter);
In the following
example I created a subscription that accept messages that have the grade under
5. For more information about defining custom rules: http://www.vunvulearadu.blogspot.hu/2012/08/service-bus-topics-how-to-use-it-part-2.html
When we are using this pattern, consumers will only receive and
process messages that where filtered. Because of this, we can have messages in
the system that will not pass any filter. This messages need to be tracked in
one way or another. For these situations we can define a custom rule in Service
Bus Topic that will receive messages that didn’t pass the rest of the rules of
the subscribers. The name of the filter expression is “MatchNoneFilterExpression”.
In the following example we setup a rule that accept messages that didn’t pass
the rest of the rules.
RuleDescription notConsumedMessagesRule = new RuleDescription()
{
FilterAction = new SqlFilterAction(“set isNotConsumed = true;”),
FilterExpression = new MatchNoneFilterExpression()
};
subscription.Add(notConsumedMessagesRule);
For more information about this time type filters: http://www.vunvulearadu.blogspot.hu/2012/09/service-bus-topics-define-custom-rules.html
This pattern can be used with success when we need to
control what kind of messages is received by each consumer. We can imagine that
we need to manage grades from a university. For this purpose each department
want to receive information related to them. The history department doesn’t
want to receive grades from the mathematic department. For this case the
Message Filter Pattern can help us a lot because it created only one entry
point for the applications and services that add these messages.
Last edit: A list of all patterns that can be used with Windows Azure Service Bus, that were described by me LINK.
Last edit: A list of all patterns that can be used with Windows Azure Service Bus, that were described by me LINK.
With Library 1.7 I don't see MatchNoneFilterExpression class in any of the dll.
ReplyDeleteHow do I implement this pattern without MatchNoneFilterExpression?
~Bhavya
Look here: http://vunvulearadu.blogspot.ro/2012/12/windows-azure-service-bus-topic-detect.html
Deletethanks Radu. Will give it a try and let you know.
Deleteit works. :)
DeleteI'm happy. Enjoy Azure :)
Delete