Since we're on a major migration process of this website, some component documents here are out of sync right now. In the meantime you may want to look at the early version of the new website
https://camel.apache.org/staging/
We would very much like to receive any feedback on the new site, please join the discussion on the Camel user mailing list.
ProducerTemplateThe 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*() methodsThe 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. lets 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 (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()
|