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