Often times, we're faced with the problem of routing a message at run-time based on the content of the message. Consider the following example. Let's say we receive all incoming orders in a single queue. However, we have two order processing services. The first service processes our normal customer orders, but we have a separate service that processes orders placed internally by employees. How do we solve this problem? A content-based router pattern solves this problem of determining where to route a message at run-time. Here's an example of a Content-Based Router implementing the example I described (the image is credited to http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html).Thankfully, it's extremely easy to implement a content-based router pattern in Camel. If you're not familiar with using Camel, refer to my tutorial on Implementing Pipes and Filters Using Camel. It's a different integration pattern, but it walks through the basics of using Camel.
Now that you're familiar with Camel, let's look at how you would define a content-based router in your Camel route.
<!-- content based router -->
<route>
<!-- get message from JMS ORDERS.INCOMING queue -->
<from uri="activemq:queue:ORDERS.INCOMING">
<!-- route the order to the correct queue -->
<choice>
<when>
<simple>${header.type} == 'customer'</simple>
<to uri="activemq:queue:ORDERS.CUSTOMER"></to>
</when>
<when>
<simple>${header.type} == 'employee'</simple>
<to uri="activemq:queue:ORDERS.EMPLOYEE"></to>
</when>
</choice>
</from>
</route>

No comments:
Post a Comment