h2. SQS Component
*Available as of Camel 2.6*

The sqs component supports sending and receiving messages to [Amazon's SQS|http://aws.amazon.com/sqs] service.

{info:title=Prerequisites}
You must have a valid Amazon Web Services developer account, and be signed up to use Amazon SQS. More information are available at [Amazon SQS|http://aws.amazon.com/sqs].
{info}

h3. URI Format
{code}
aws-sqs://queue-name[?options]
{code}
The queue will be created if they don't already exists.
You can append query options to the URI in the following format, ?options=value&option2=value&...

h3. URI Options
|| Name || Default Value || Context || Description ||
|amazonSQSClient | {{null}} | Shared | Reference to a {{com.amazonaws.services.sqs.AmazonSQSClient}} in the [Registry]. |
|accessKey | {{null}} | Shared | Amazon AWS Access Key |
|secretKey | {{null}} | Shared | Amazon AWS Secret Key |
|amazonSQSEndpoint | {{null}} | Shared | The region with which the AWS-SQS client wants to work with. |
|attributeNames | {{null}} | Consumer | A list of attributes to set in the {{com.amazonaws.services.sqs.model.ReceiveMessageRequest}}. |
|defaultVisibilityTimeout | {{null}} | Shared | The visibility timeout (in seconds) to set in the {{com.amazonaws.services.sqs.model.CreateQueueRequest}}. |
|deleteAfterRead | {{true}} | Consumer | Delete message from SQS after it has been read |
|maxMessagesPerPoll| {{null}} | Consumer | The maximum number of messages which can be received in one poll to set in the {{com.amazonaws.services.sqs.model.ReceiveMessageRequest}}. |
|visibilityTimeout | {{null}} | Shared | The duration (in seconds) that the received messages are hidden from subsequent retrieve requests after being retrieved by a ReceiveMessage request to set in the {{com.amazonaws.services.sqs.model.SetQueueAttributesRequest}}. This only make sense if its different from {{defaultVisibilityTimeout}}. It changes the queue visibility timeout attribute permanently. |
|messageVisibilityTimeout | {{null}} | Consumer | *Camel 2.8:* The duration (in seconds) that the received messages are hidden from subsequent retrieve requests after being retrieved by a ReceiveMessage request to set in the {{com.amazonaws.services.sqs.model.ReceiveMessageRequest}}. It does *NOT* change the queue visibility timeout attribute permanently. |
|maximumMessageSize | {{null}} | Shared | *Camel 2.8:* The maximumMessageSize (in bytes) an SQS message can contain for this queue, to set in the {{com.amazonaws.services.sqs.model.SetQueueAttributesRequest}}. |
|messageRetentionPeriod | {{null}} | Shared | *Camel 2.8:* The messageRetentionPeriod (in seconds) a message will be retained by SQS for this queue, to set in the {{com.amazonaws.services.sqs.model.SetQueueAttributesRequest}}. |
|policy | {{null}} | Shared | *Camel 2.8:* The policy for this queue to set in the {{com.amazonaws.services.sqs.model.SetQueueAttributesRequest}}. |

{info:title=Required SQS component options}
You have to provide the amazonSQSClient in the [Registry] or your accessKey and secretKey to access the [Amazon's SQS|http://aws.amazon.com/sqs].
{info}

h3. Batch Consumer
This component implements the [Batch Consumer]. 

This allows you for instance to know how many messages exists in this batch and for instance let the [Aggregator] aggregate this number of messages.

h3. Usage
h4. Message headers set by the SQS producer
{div:class=confluenceTableSmall}
|| Header || Type || Description ||
| {{CamelAwsSqsMD5OfBody}} | {{String}} | The MD5 checksum of the Amazon SQS message. |
| {{CamelAwsSqsMessageId}} | {{String}} | The Amazon SQS message ID. |
{div}

h4. Message headers set by the SQS consumer
{div:class=confluenceTableSmall}
|| Header || Type || Description ||
| {{CamelAwsSqsMD5OfBody}} | {{String}} | The MD5 checksum of the Amazon SQS message. |
| {{CamelAwsSqsMessageId}} | {{String}} | The Amazon SQS message ID. |
| {{CamelAwsSqsReceiptHandle}} | {{String}} |  The Amazon SQS message receipt handle. |
| {{CamelAwsSqsAttributes}} | {{Map<String, String>}} | The Amazon SQS message attributes. |
{div}

h4. Advanced AmazonSQSClient configuration
If your Camel Application is running behind a firewall or if you need to have more control over the AmazonSQSClient configuration, you can create your own instance:
{code}
AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");

ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

AmazonSQSClient client = new AmazonSQSClient(awsCredentials, clientConfiguration);
{code}

and refer to it in your Camel aws-sqs component configuration:
{code}
from("aws-sqs://MyQueue?amazonSQSClient=#amazonSQSClient&delay=5000&maxMessagesPerPoll=5")
.to("mock:result");
{code}

h3. Dependencies
Maven users will need to add the following dependency to their pom.xml.
{code:xml|title=pom.xml}
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>
{code}

where {{$\{camel-version\}}} must be replaced by the actual version of Camel (2.6 or higher).

{include:Endpoint See Also}
- [AWS Component|AWS]