Poll
Camel supports the Content Enricher from the EIP patterns.
In Camel the Content Enricher can be done in several ways:
-
Using Enrich EIP, Poll Enrich, or Poll EIP
-
Using a Message Translator
-
Using a Processor with the enrichment programmed in Java
-
Using a Bean EIP with the enrichment programmed in Java
The Poll EIP is a simplified Poll Enrich which only supports:
-
Static Endpoints
-
No custom aggregation or other advanced features
-
Uses a 20 seconds timeout (default)
Options
The Poll eip supports 0 options, which are listed below.
Name | Description | Default | Type |
---|---|---|---|
description | Sets the description of this node. | String | |
disabled | Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime. | false | Boolean |
variableReceive | To use a variable to store the received message body (only body, not headers). This makes it handy to use variables for user data and to easily control what data to use for sending and receiving. Important: When using receive variable then the received body is stored only in this variable and not on the current message. | String | |
uri | Required Sets the uri of the endpoint to poll from. | String | |
timeout | Timeout in millis when polling from the external service. The timeout has influence about the poll enrich behavior. It basically operations in three different modes: negative value - Waits until a message is available and then returns it. Warning that this method could block indefinitely if no messages are available. 0 - Attempts to receive a message exchange immediately without waiting and returning null if a message exchange is not available yet. positive value - Attempts to receive a message exchange, waiting up to the given timeout to expire if a message is not yet available. Returns null if timed out The default value is 20000 (20 seconds). | 20000 | String |
Polling a message using Poll EIP
poll
uses a Polling Consumer to obtain the data. It is usually used for Event Message messaging, for instance, to read a file or download a file using FTP.
We have three methods when polling:
-
receive
: Waits until a message is available and then returns it. Warning that this method could block indefinitely if no messages are available. -
receiveNoWait
: Attempts to receive a message exchange immediately without waiting and returningnull
if a message exchange is not available yet. -
receive(timeout)
: Attempts to receive a message exchange, waiting up to the given timeout to expire if a message is not yet available. Returns the message ornull
if the timeout expired.
Timeout
By default, Camel will use the receive(timeout)
which has a 20 seconds timeout.
You can pass in a timeout value that determines which method to use:
-
if timeout is
-1
or other negative number thenreceive
is selected (Important: thereceive
method may block if there is no message) -
if timeout is
0
thenreceiveNoWait
is selected -
otherwise,
receive(timeout)
is selected
The timeout values are in milliseconds.
Using Poll
For example to download an FTP file:
<rest path="/report">
<description>Report REST API</description>
<get path="/{id}/payload">
<route id="report-payload-download">
<poll uri="ftp:myserver.com/myfolder?fileName=report-file.pdf"/>
</route>
</get>
</rest>
You can use dynamic values using the simple language in the uri, as shown below: |
<rest path="/report">
<description>Report REST API</description>
<get path="/{id}/payload">
<route id="report-payload-download">
<poll uri="ftp:myserver.com/myfolder?fileName=report-${header.id}.pdf"/>
</route>
</get>
</rest>
Using Poll with Rest DSL
You can also use poll
with Rest DSL to, for example, download a file from AWS S3 as the response of an API call.
<rest path="/report">
<description>Report REST API</description>
<get path="/{id}/payload">
<route id="report-payload-download">
<poll uri="aws-s3:xavier-dev?amazonS3Client=#s3client&deleteAfterRead=false&fileName=report-file.pdf"/>
</route>
</get>
</rest>