31. Splitter
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;file://ordersquot;).
splitter(body().tokenize(quot;nquot;)).
to(quot;activemq:Order.Itemsquot;);
}
}
32. Splitter Using XQuery
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;file://ordersquot;).
splitter().xquery(quot;/order/itemsquot;).
to(quot;activemq:Order.Itemsquot;);
}
}
33. Aggregator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;activemq:Inventory.Itemsquot;).
aggregator(header(quot;symbolquot;).isEqualTo(quot;IBMquot;).
to(quot;activemq:Inventory.Orderquot;);
}
}
34. Message Translator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;file://incoming”).
to(quot;xslt:com/acme/mytransform.xslquot;).
to(quot;http://outgoing.com/fooquot;);
}
}
35. Resequencer
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;direct:a”).
resequencer(header(quot;customerRankquot;)).
to(quot;seda:bquot;);
}
}
36. Routing Slip
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;direct:a”).routingSlip();
}
}
37. Throttler
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;seda:a”).
throttler(3).timePeriodMillis(30000).
to(quot;seda:bquot;);
}
}
38. Delayer
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;seda:a”).
delayer(header(quot;JMSTimestampquot;, 3000).
to(quot;seda:bquot;);
}
}
39. Load Balancer
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;file:/path/to/filequot;).
loadBalance().roundRobin().
to(quot;seda:aquot;, quot;seda:bquot;, quot;seda:cquot;);
}
}
Policy Description
Round Robin Balance the exchange load across the available endpoints
Random Randomly choose an endpoint to send the exchange
Sticky Sticky load balancing of exchanges using an expression
Topic Send exchange to all endpoints (like a JMS topic)
40. Multicast
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;direct:aquot;).
multicast().
to(quot;direct:x?x=y&1=2quot;, quot;direct:yquot;, quot;direct:zquot;);
}
}
43. Wire Tap
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;direct:aquot;).
to(quot;log:com.mycompany.messages?level=infoquot;).
to(quot;mock:fooquot;);
}
}
44. Content Enricher
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;activemq:My.Queuequot;).
to(quot;velocity:com/acme/MyResponse.vmquot;).
to(quot;activemq:Another.Queuequot;);
}
}
45. More Content Enricher
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;activemq:My.Queuequot;).
beanRef(quot;myBeanNamequot;, quot;myMethodNamequot;).
to(quot;activemq:Another.Queuequot;);
}
}
46. Content Filter
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;direct:startquot;).process(new Processor() {
public void process(Exchange exchange) {
Message in = exchange.getIn();
in.setBody(in.getBody(String.class) + quot; World!quot;);
}
}).to(quot;mock:resultquot;);
}
}
47. Combine Patterns
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;seda:a”).
resequencer(header(quot;JMSGroupSeqquot;)).
delayer(3000).
to(quot;mock:xquot;);
}
}
48. Configure Error Handling
Global Error Handler:
RouteBuilder builder = new RouteBuilder() {
public void configure() {
errorHandler(deadLetterChannel(quot;file:errorsquot;));
from(quot;bean:fooquot;).to(quot;seda:bquot;);
}
};
49. Configure Error Handling
Local Error Handler:
RouteBuilder builder = new RouteBuilder() {
public void configure() {
from(quot;seda:aquot;).
errorHandler(loggingErrorHandler(quot;FOO.BARquot;)).
to(quot;seda:bquot;);
from(quot;seda:bquot;).to(quot;seda:cquot;);
}
};
52. Make Context Discover Beans
package com.mycompany.beans;
public class MyBean {
public void someMethod(String name) {
...
}
}
<camelContext
xmlns=quot;http://activemq.apache.org/camel/schema/springquot;>
<package>com.mycompany.beans</package>
</camelContext>
53. Bean as a Message Translator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;activemq:Incoming”).
beanRef(quot;myBeanquot;).
to(quot;activemq:Outgoingquot;);
}
}
54. Bean as a
Message Translator
*With Method Name
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;activemq:Incoming”).
beanRef(quot;myBeanquot;, quot;someMethodquot;).
to(quot;activemq:Outgoingquot;);
}
}
55. Binding Beans to
Camel Endpoints
public class Foo {
@MessageDriven(uri=quot;activemq:cheesequot;)
public void onCheese(String name) {
...
}
}
56. Binding Method Arguments
public class Foo {
public void onCheese(
@XPath(quot;/foo/barquot;) String name,
@Header(quot;JMSCorrelationIDquot;) String id) {
...
}
}
57. Injecting Endpoints
Into Beans
public class Foo {
@EndpointInject(uri=quot;activemq:foo.barquot;)
ProducerTemplate producer;
public void doSomething() {
if (whatever) {
producer.sendBody(quot;<hello>world!</hello>quot;);
}
}
}
59. Type Conversion
@Converter
public class IOConverter {
@Converter
public static InputStream toInputStream(File file)
throws FileNotFoundException {
return new BufferedInputStream(
new FileInputStream(file));
}
}
60. Type Convertors
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;direct:startquot;).process(new Processor() {
public void process(Exchange exchange) {
Message in = exchange.getIn();
in.setBody(in.getBody(String.class) + quot; World!quot;);
}
}).to(quot;mock:resultquot;);
}
}
Support for the following types:
• File
• String
• byte[] and ByteBuffer
• InputStream and OutputStream
• Reader and Writer
• Document and Source
62. Message Translator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;file://incoming”).
to(quot;xslt:com/acme/mytransform.xslquot;).
to(quot;http://outgoing.com/fooquot;);
}
}
63. Another
Message Translator
public class MyRouteBuilder extends RouteBuilder {
public void configure() {
from(quot;activemq:FOO.TEST”).
transform(body().append(getDynamicText())).
to(quot;http://outgoing.com/fooquot;);
}
}
65. Business Activity Monitoring
(BAM)
public class MyActivities extends ProcessBuilder {
public void configure() throws Exception {
// lets define some activities, correlating on an
// XPath query of the message body
ActivityBuilder purchaseOrder = activity(quot;activemq:PurchaseOrdersquot;)
.correlate(xpath(quot;/purchaseOrder/@idquot;).stringResult());
ActivityBuilder invoice = activity(quot;activemq:Invoicesquot;)
.correlate(xpath(quot;/invoice/@purchaseOrderIdquot;).stringResult());
// now lets add some BAM rules
invoice.starts().after(purchaseOrder.completes())
.expectWithin(seconds(1))
.errorIfOver(seconds(2)).to(quot;activemq:FailedProcessesquot;);
}
}