| [[ProducerTemplate-ProducerTemplate]] |
| === 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 link:endpoint.adoc[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 |
| link:endpoint.adoc[Endpoint] or uri as the first parameter. |
| |
| The `sendBody()` method allows you to send any object to an endpoint |
| easily. |
| |
| [source,java] |
| ---- |
| 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. |
| |
| |
| [[ProducerTemplate-requestmethods]] |
| ==== `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: |
| |
| [source,java] |
| ---- |
| 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); |
| ---- |
| |
| |
| [[ProducerTemplate-Fluentinterface]] |
| ==== Fluent interface |
| |
| *Available as of Camel 2.18.0* |
| |
| The FluentProducerTemplate provides a fluent syntax to |
| ProducerTemplate. |
| |
| Examples: |
| |
| *Set headers and body* |
| |
| [source,java] |
| ---- |
| 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* |
| |
| [source,java] |
| ---- |
| Integer result = FluentProducerTemplate.on(context) |
| .withProcessor(exchange -> exchange.getIn().setBody("Hello World")) |
| .to("direct:exception") |
| .request(Integer.class); |
| ---- |
| |
| *Customize template* |
| |
| [source,java] |
| ---- |
| Object result = FluentProducerTemplate.on(context) |
| .withTemplateCustomizer( |
| template -> { |
| template.setExecutorService(myExecutor); |
| template.setMaximumCacheSize(10); |
| } |
| ) |
| .withBody("the body") |
| .to("direct:start") |
| .request(); |
| |
| ---- |