ProducerTemplate
The ProducerTemplate interface allows you to send message exchanges to endpoints in a variety of different ways to make it easy to work with Camel Endpoint instances from Java code.
It can be configured with a default endpoint if you just want to send lots of messages to the same endpoint; or you can specify an Endpoint or uri as the first parameter.
The sendBody()
method allows you to send any object to an endpoint
easily.
ProducerTemplate template = exchange.getContext().createProducerTemplate();
// send to default endpoint
template.sendBody("<hello>world!</hello>");
// send to a specific queue
template.sendBody("activemq:MyQueue", "<hello>world!</hello>");
// send with a body and header
template.sendBodyAndHeader("activemq:MyQueue",
"<hello>world!</hello>",
"CustomerRating", "Gold");
You can also supply an Exchange
or a Processor
to customize the exchange.
request*()
methods
The send*()
methods use the default Message Exchange Pattern (InOnly,
InOut etc) as the endpoint. If you want to explicitly perform a
request/response (InOut) you can use the request*()
methods instead of
the send*()
methods.
E.g. let’s invoke an endpoint and get the response:
Object response = template.requestBody("<hello/>");
// you can cast the response directly
String ret = template.requestBody("<hello/>", String.class);
// or specify the endpoint directly
String ret = template.requestBody("cxf:bean:HelloWorldService", "<hello/>", String.class);
Fluent interface
Since Camel 2.18.0
The FluentProducerTemplate provides a fluent syntax to ProducerTemplate.
Examples:
Set headers and body
Integer result = FluentProducerTemplate.on(context)
.withHeader("key-1", "value-1")
.withHeader("key-2", "value-2")
.withBody("Hello")
.to("direct:inout")
.request(Integer.class);
Use a processor
Integer result = FluentProducerTemplate.on(context)
.withProcessor(exchange -> exchange.getIn().setBody("Hello World"))
.to("direct:exception")
.request(Integer.class);
Customize template
Object result = FluentProducerTemplate.on(context)
.withTemplateCustomizer(
template -> {
template.setExecutorService(myExecutor);
template.setMaximumCacheSize(10);
}
)
.withBody("the body")
.to("direct:start")
.request();