This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new dc7e33c Regen
dc7e33c is described below
commit dc7e33c4872f153444a1b368328a33338d501b48
Author: Andrea Cosentino <[email protected]>
AuthorDate: Thu Apr 23 21:43:33 2020 +0200
Regen
---
apache-camel/src/main/descriptors/common-bin.xml | 1 +
bom/camel-bom/pom.xml | 5 +
docs/components/modules/ROOT/nav.adoc | 1 +
.../ROOT/pages/azure-storage-queue-component.adoc | 402 +++++++++++++++++++++
4 files changed, 409 insertions(+)
diff --git a/apache-camel/src/main/descriptors/common-bin.xml
b/apache-camel/src/main/descriptors/common-bin.xml
index bd71df9..c2efcc3 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -104,6 +104,7 @@
<include>org.apache.camel:camel-aws2-translate</include>
<include>org.apache.camel:camel-azure</include>
<include>org.apache.camel:camel-azure-storage-blob</include>
+ <include>org.apache.camel:camel-azure-storage-queue</include>
<include>org.apache.camel:camel-barcode</include>
<include>org.apache.camel:camel-base64</include>
<include>org.apache.camel:camel-bean</include>
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 9184167..85da938 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -313,6 +313,11 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
+ <artifactId>camel-azure-storage-queue</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
<artifactId>camel-barcode</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/docs/components/modules/ROOT/nav.adoc
b/docs/components/modules/ROOT/nav.adoc
index 86854a8..a595677 100644
--- a/docs/components/modules/ROOT/nav.adoc
+++ b/docs/components/modules/ROOT/nav.adoc
@@ -61,6 +61,7 @@
** xref:azure-storage-blob-component.adoc[Azure Storage Blob Service]
** xref:azure-blob-component.adoc[Azure Storage Blob Service (Legacy)]
** xref:azure-queue-component.adoc[Azure Storage Queue Service]
+** xref:azure-storage-queue-component.adoc[Azure Storage Queue Service]
** xref:bean-component.adoc[Bean]
** xref:bean-validator-component.adoc[Bean Validator]
** xref:beanstalk-component.adoc[Beanstalk]
diff --git
a/docs/components/modules/ROOT/pages/azure-storage-queue-component.adoc
b/docs/components/modules/ROOT/pages/azure-storage-queue-component.adoc
new file mode 100644
index 0000000..211b652
--- /dev/null
+++ b/docs/components/modules/ROOT/pages/azure-storage-queue-component.adoc
@@ -0,0 +1,402 @@
+[[azure-storage-queue-component]]
+= Azure Storage Queue Service Component
+//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
+:page-source:
components/camel-azure-storage-queue/src/main/docs/azure-storage-queue-component.adoc
+:docTitle: Azure Storage Queue Service
+:artifactId: camel-azure-storage-queue
+:description: The azure-storage-queue component is used for storing and
retrieving the messages to/from Azure Storage Queue using Azure SDK v12.
+:since: 3.3
+:supportLevel: Stable
+:component-header: Both producer and consumer are supported
+
+*Since Camel {since}*
+
+*{component-header}*
+
+The Azure Storage Queue component supports storing and retrieving the messages
to/from
+https://azure.microsoft.com/services/storage/queues/[Azure Storage Queue]
service using *Azure APIs v12*. However in case of versions above v12,
+we will see if this component can adopt these changes depending on how much
breaking changes can result.
+
+Prerequisites
+
+You must have a valid Windows Azure Storage account. More information is
available at
+https://docs.microsoft.com/azure/[Azure Documentation Portal].
+
+Maven users will need to add the following dependency to their `pom.xml`
+for this component:
+
+[source,xml]
+------------------------------------------------------------
+<dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-azure-storage-queue</artifactId>
+ <version>x.x.x</version>
+ <!-- use the same version as your Camel core version -->
+</dependency>
+------------------------------------------------------------
+
+== URI Format
+
+[source,text]
+------------------------------
+azure-storage-queue://accountName[/queueName][?options]
+------------------------------
+
+In case of consumer, accountName and queueName are required. In case of
producer, it depends on the operation that being
+requested, for example if operation is on a service level, e.b: listQueues,
only accountName is required, but in case
+of operation being requested on the queue level, e.g: createQueue,
sendMessage.. etc, both accountName and queueName are required.
+
+The queue will be created if it does not already exist.
+You can append query options to the URI in the following format,
?options=value&option2=value&...
+
+For example in order to get a message content from the queue `messageQueue`
+in the `camelazure` storage account and, use the following snippet:
+[source,java]
+--------------------------------------------------------------------------------
+from("azure-storage-queue:/camelazure/messageQueue?accountName=yourAccountName&accessKey=yourAccessKey").
+to("file://queuedirectory");
+--------------------------------------------------------------------------------
+
+
+== URI Options
+
+// component options: START
+The Azure Storage Queue Service component supports 12 options, which are
listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *configuration* (common) | The component configurations | |
QueueConfiguration
+| *serviceClient* (common) | Service client to a storage account to interact
with the queue service. This client does not hold any state about a particular
storage account but is instead a convenient way of sending off appropriate
requests to the resource on the service. This client contains all the
operations for interacting with a queue account in Azure Storage. Operations
allowed by the client are creating, listing, and deleting queues, retrieving
and updating properties of the accoun [...]
+| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the
Camel routing Error Handler, which mean any exceptions occurred while the
consumer is trying to pickup incoming messages, or the likes, will now be
processed as a message and handled by the routing Error Handler. By default the
consumer will use the org.apache.camel.spi.ExceptionHandler to deal with
exceptions, that will be logged at WARN or ERROR level and ignored. | false |
boolean
+| *lazyStartProducer* (producer) | Whether the producer should be started lazy
(on the first message). By starting lazy you can use this to allow CamelContext
and routes to startup in situations where a producer may otherwise fail during
starting and cause the route to fail being started. By deferring this startup
to be lazy then the startup failure can be handled during routing messages via
Camel's routing error handlers. Beware that when the first message is processed
then creating and [...]
+| *operation* (producer) | Queue service operation hint to the producer. The
value can be one of: listQueues, createQueue, deleteQueue, clearQueue,
sendMessage, deleteMessage, receiveMessages, peekMessages, updateMessage | |
QueueOperationDefinition
+| *basicPropertyBinding* (advanced) | Whether the component should use basic
property binding (Camel 2.x) or the newer property binding with additional
capabilities | false | boolean
+| *maxMessages* (queue) | Maximum number of messages to get, if there are less
messages exist in the queue than requested all the messages will be returned.
If left empty only 1 message will be retrieved, the allowed range is 1 to 32
messages. | 1 | Integer
+| *timeout* (queue) | An optional timeout applied to the operation. If a
response is not returned before the timeout concludes a RuntimeException will
be thrown. | | Duration
+| *timeToLive* (queue) | How long the message will stay alive in the queue. If
unset the value will default to 7 days, if -1 is passed the message will not
expire. The time to live must be -1 or any positive number. The format should
be in this form: PnDTnHnMn.nS., e.g: PT20.345S -- parses as 20.345 seconds, P2D
-- parses as 2 days However, in case you are using EndpointDsl/ComponentDsl,
you can do something like Duration.ofSeconds() since these Java APIs are
typesafe. | | Duration
+| *visibilityTimeout* (queue) | The timeout period for how long the message is
invisible in the queue. The timeout must be between 1 seconds and 7 days. The
format should be in this form: PnDTnHnMn.nS., e.g: PT20.345S -- parses as
20.345 seconds, P2D -- parses as 2 days However, in case you are using
EndpointDsl/ComponentDsl, you can do something like Duration.ofSeconds() since
these Java APIs are typesafe. | | Duration
+| *accessKey* (security) | Access key for the associated azure account name to
be used for authentication with azure queue services | | String
+| *credentials* (security) | StorageSharedKeyCredential can be injected to
create the azure client, this holds the important authentication information |
| StorageSharedKeyCredential
+|===
+// component options: END
+
+// endpoint options: START
+The Azure Storage Queue Service endpoint is configured using URI syntax:
+
+----
+azure-storage-queue:queueName
+----
+
+with the following path and query parameters:
+
+=== Path Parameters (2 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *accountName* | Azure account name to be used for authentication with azure
queue services | | String
+| *queueName* | The queue resource name | | String
+|===
+
+
+=== Query Parameters (14 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *serviceClient* (common) | Service client to a storage account to interact
with the queue service. This client does not hold any state about a particular
storage account but is instead a convenient way of sending off appropriate
requests to the resource on the service. This client contains all the
operations for interacting with a queue account in Azure Storage. Operations
allowed by the client are creating, listing, and deleting queues, retrieving
and updating properties of the accoun [...]
+| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the
Camel routing Error Handler, which mean any exceptions occurred while the
consumer is trying to pickup incoming messages, or the likes, will now be
processed as a message and handled by the routing Error Handler. By default the
consumer will use the org.apache.camel.spi.ExceptionHandler to deal with
exceptions, that will be logged at WARN or ERROR level and ignored. | false |
boolean
+| *exceptionHandler* (consumer) | To let the consumer use a custom
ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this
option is not in use. By default the consumer will deal with exceptions, that
will be logged at WARN or ERROR level and ignored. | | ExceptionHandler
+| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer
creates an exchange. The value can be one of: InOnly, InOut, InOptionalOut | |
ExchangePattern
+| *lazyStartProducer* (producer) | Whether the producer should be started lazy
(on the first message). By starting lazy you can use this to allow CamelContext
and routes to startup in situations where a producer may otherwise fail during
starting and cause the route to fail being started. By deferring this startup
to be lazy then the startup failure can be handled during routing messages via
Camel's routing error handlers. Beware that when the first message is processed
then creating and [...]
+| *operation* (producer) | Queue service operation hint to the producer. The
value can be one of: listQueues, createQueue, deleteQueue, clearQueue,
sendMessage, deleteMessage, receiveMessages, peekMessages, updateMessage | |
QueueOperationDefinition
+| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic
property binding (Camel 2.x) or the newer property binding with additional
capabilities | false | boolean
+| *synchronous* (advanced) | Sets whether synchronous processing should be
strictly used, or Camel is allowed to use asynchronous processing (if
supported). | false | boolean
+| *maxMessages* (queue) | Maximum number of messages to get, if there are less
messages exist in the queue than requested all the messages will be returned.
If left empty only 1 message will be retrieved, the allowed range is 1 to 32
messages. | 1 | Integer
+| *timeout* (queue) | An optional timeout applied to the operation. If a
response is not returned before the timeout concludes a RuntimeException will
be thrown. | | Duration
+| *timeToLive* (queue) | How long the message will stay alive in the queue. If
unset the value will default to 7 days, if -1 is passed the message will not
expire. The time to live must be -1 or any positive number. The format should
be in this form: PnDTnHnMn.nS., e.g: PT20.345S -- parses as 20.345 seconds, P2D
-- parses as 2 days However, in case you are using EndpointDsl/ComponentDsl,
you can do something like Duration.ofSeconds() since these Java APIs are
typesafe. | | Duration
+| *visibilityTimeout* (queue) | The timeout period for how long the message is
invisible in the queue. The timeout must be between 1 seconds and 7 days. The
format should be in this form: PnDTnHnMn.nS., e.g: PT20.345S -- parses as
20.345 seconds, P2D -- parses as 2 days However, in case you are using
EndpointDsl/ComponentDsl, you can do something like Duration.ofSeconds() since
these Java APIs are typesafe. | | Duration
+| *accessKey* (security) | Access key for the associated azure account name to
be used for authentication with azure queue services | | String
+| *credentials* (security) | StorageSharedKeyCredential can be injected to
create the azure client, this holds the important authentication information |
| StorageSharedKeyCredential
+|===
+// endpoint options: END
+
+*Required information options:*
+
+To use this component, you have 3 options in order to provide the required
Azure authentication information:
+
+- Provide `accountName` and `accessKey` for your Azure account, this is the
simplest way to get started. The accessKey can
+be generated through your Azure portal.
+- Provide a
https://azuresdkartifacts.blob.core.windows.net/azure-sdk-for-java/staging/apidocs/com/azure/storage/common/StorageSharedKeyCredential.html[StorageSharedKeyCredential]
instance which can be
+provided into `credentials` option.
+- Provide a
https://azuresdkartifacts.blob.core.windows.net/azure-sdk-for-java/staging/apidocs/com/azure/storage/queue/QueueServiceClient.html[QueueServiceClient]
instance which can be
+provided into `serviceClient`. Note: You don't need to create a specific
client, e.g: QueueClient, the QueueServiceClient represents the upper level
which
+can be used to retrieve lower level clients.
+
+== 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.
+
+== Usage
+
+=== Message headers evaluated by the component producer
+[width="100%",cols="10%,10%,10%,10%,60%",options="header",]
+|=======================================================================
+|Header |Variable Name |Type |Operations |Description
+
+|`CamelAzureStorageQueueSegmentOptions`|
`QueueConstants.QUEUES_SEGMENT_OPTIONS`|`QueuesSegmentOptions`|`listQueues`|Options
for listing queues
+|`CamelAzureStorageQueueTimeout`|`QueueConstants.TIMEOUT`|`Duration`|All|An
optional timeout value beyond which a {@link RuntimeException} will be raised.
+|`CamelAzureStorageQueueMetadata`|`QueueConstants.METADATA`|`Map<String,String>`|`createQueue`|Metadata
to associate with the queue
+|`CamelAzureStorageQueueMessageText`|`QueueConstants.MESSAGE_TEXT`|`String`|`sendMessage`,
`updateMessage`| Message text to be sent or update existing message
+|`CamelAzureStorageQueueTimeToLive`|`QueueConstants.TIME_TO_LIVE`|`Duration`|`sendMessage`|How
long the message will stay alive in the queue. If unset the value will default
to 7 days, if -1 is passed the message will not expire. The time to live must
be -1 or any positive number.
+|`CamelAzureStorageQueueVisibilityTimeout`|`QueueConstants.VISIBILITY_TIMEOUT`|`Duration`|`sendMessage`,
`receiveMessages`, `updateMessage`| The timeout period for how long the
message is invisible in the queue. If unset the value will default to 0 and the
message will be instantly visible. The timeout must be between 0 seconds and 7
days.
+|`CamelAzureStorageQueueQueueCreated`|`QueueConstants.QUEUE_CREATED`|`boolean`|`sendMessage`|
When is set to `true`, the queue will not be automatically created when
sending messages to the queue.
+|`CamelAzureStorageQueuePopReceipt`|`QueueConstants.POP_RECEIPT`|`String`|`deleteMessage`,
`updateMessage`|Unique identifier that must match for the message to be
deleted or updated.
+|`CamelAzureStorageQueueMessageId`|`QueueConstants.MESSAGE_ID`|`String`|`deleteMessage`,
`updateMessage`| The ID of the message to be deleted or updated.
+|`CamelAzureStorageQueueMaxMessages`|`QueueConstants.MAX_MESSAGES`|`Integer`|`receiveMessages`,
`peekMessages`| Maximum number of messages to get, if there are less messages
exist in the queue than requested all the messages will be returned. If left
empty only 1 message will be retrieved, the allowed range is 1 to 32 messages.
+|`CamelAzureStorageQueueOperation`|`QueueConstants.QUEUE_OPERATION`|`QueueOperationDefinition`|All|Specify
the producer operation to execute, please see the doc on this page related to
producer operation.
+|`CamelAzureStorageQueueName`|`QueueConstants.QUEUE_NAME`|`String`|All|
Override the queue name.
+|=======================================================================
+
+
+=== Message headers set by either component producer or consumer
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|=======================================================================
+|Header |Variable Name |Type |Description
+|`CamelAzureStorageQueueMessageId`|`QueueConstants.MESSAGE_ID`|`String`| The
ID of message that being sent to the queue.
+|`CamelAzureStorageQueueInsertionTime`|`QueueConstants.INSERTION_TIME`|`OffsetDateTime`|The
time the Message was inserted into the Queue.
+|`CamelAzureStorageQueueExpirationTime`|`QueueConstants.EXPIRATION_TIME`|`OffsetDateTime`|The
time that the Message will expire and be automatically deleted.
+|`CamelAzureStorageQueuePopReceipt`|`QueueConstants.POP_RECEIPT`|`String`|This
value is required to delete/update the Message. If deletion fails using this
popreceipt then the message has been dequeued by another client.
+|`CamelAzureStorageQueueTimeNextVisible`|`QueueConstants.TIME_NEXT_VISIBLE`|`OffsetDateTime`|The
time that the message will again become visible in the Queue.
+|`CamelAzureStorageQueueDequeueCount` |
`QueueConstants.DEQUEUE_COUNT`|`long`|The number of times the message has been
dequeued.
+|`CamelAzureStorageQueueRawHttpHeaders`|`QueueConstants.RAW_HTTP_HEADERS`|`HttpHeaders`|Returns
non-parsed httpHeaders that can be used by the user.
+|=======================================================================
+
+=== Advanced Azure Storage Queue configuration
+If your Camel Application is running behind a firewall or if you need to
+have more control over the `QueueServiceClient` instance configuration, you can
+create your own instance:
+[source,java]
+-----------------------------------------------------------------------
+StorageSharedKeyCredential credential = new
StorageSharedKeyCredential("yourAccountName", "yourAccessKey");
+String uri = String.format("https://%s.queue.core.windows.net",
"yourAccountName");
+
+QueueServiceClient client = new QueueServiceClientBuilder()
+ .endpoint(uri)
+ .credential(credential)
+ .buildClient();
+// This is camel context
+context.getRegistry().bind("client", client);
+-----------------------------------------------------------------------
+
+Then refer to this instance in your Camel `azure-storage-queue` component
configuration:
+
+[source,java]
+-----------------------------------------------------------------------
+from("azure-storage-queue://cameldev/queue1?serviceClient=#client")
+.to("file://outputFolder?fileName=output.txt&fileExist=Append");
+-----------------------------------------------------------------------
+
+=== Automatic detection of QueueServiceClient client in registry
+
+The component is capable of detecting the presence of an QueueServiceClient
bean into the registry.
+If it's the only instance of that type it will be used as client and you won't
have to define it as uri parameter, like the example above.
+This may be really useful for smarter configuration of the endpoint.
+
+=== Azure Storage Queue Producer operations
+
+Camel Azure Storage Queue component provides wide range of operations on the
producer side:
+
+*Operations on the service level*
+
+For these operations, `accountName` is *required*.
+[width="100%",cols="10%,90%",options="header",]
+|===
+|Operation |Description
+|`listQueues` |Lists the queues in the storage account that pass the filter
starting at the specified marker.
+|===
+
+
+*Operations on the queue level*
+
+For these operations, `accountName` and `queueName` are *required*.
+[width="100%",cols="10%,90%",options="header",]
+|===
+|Operation |Description
+|`createQueue` | Creates a new queue.
+|`deleteQueue` | Permanently deletes the queue.
+|`clearQueue`| Deletes all messages in the queue..
+|`sendMessage`| *Default Producer Operation* Sends a message with a given
time-to-live and a timeout period where the message is invisible in the queue.
+|`deleteMessage`| Deletes the specified message in the queue.
+|`receiveMessages`| Retrieves up to the maximum number of messages from the
queue and hides them from other operations for the timeout period. However it
will not dequeue the message from the queue due to reliability reasons.
+|`peekMessages`| Peek messages from the front of the queue up to the maximum
number of messages.
+|`updateMessage`| Updates the specific message in the queue with a new message
and resets the visibility timeout.
+|===
+
+Refer to the example section in this page to learn how to use these operations
into your camel application.
+
+=== Consumer Examples
+To consume a queue into a file component with maximum 5 messages in one batch,
this can be done like this:
+[source,java]
+-----------------------------------------------------------------------
+from("azure-storage-queue://cameldev/queue1?serviceClient=#client&maxMessages=5")
+.to("file://outputFolder?fileName=output.txt&fileExist=Append");
+-----------------------------------------------------------------------
+
+=== Producer Operations Examples
+- `listQueues`:
+
+[source,java]
+-----------------------------------------------------------------------
+from("direct:start")
+ .process(exchange -> {
+ // set the header you want the producer to evaluate, refer to the
previous
+ // section to learn about the headers that can be set
+ // e.g, to only returns list of queues with 'awesome' prefix:
+ exchange.getIn().setHeader(QueueConstants.QUEUES_SEGMENT_OPTIONS, new
QueuesSegmentOptions().setPrefix("awesome"));
+ })
+
.to("azure-storage-queue://cameldev?serviceClient=#client&operation=listQueues")
+ .log("${body}")
+ .to("mock:result");
+-----------------------------------------------------------------------
+
+
+- `createQueue`:
+
+[source,java]
+-----------------------------------------------------------------------
+from("direct:start")
+ .process(exchange -> {
+ // set the header you want the producer to evaluate, refer to the
previous
+ // section to learn about the headers that can be set
+ // e.g:
+ exchange.getIn().setHeader(QueueConstants.QUEUE_NAME, "overrideName");
+ })
+
.to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=createQueue");
+-----------------------------------------------------------------------
+
+- `deleteQueue`:
+
+[source,java]
+-----------------------------------------------------------------------
+from("direct:start")
+ .process(exchange -> {
+ // set the header you want the producer to evaluate, refer to the
previous
+ // section to learn about the headers that can be set
+ // e.g:
+ exchange.getIn().setHeader(QueueConstants.QUEUE_NAME, "overrideName");
+ })
+
.to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=deleteQueue");
+-----------------------------------------------------------------------
+
+- `clearQueue`:
+
+[source,java]
+-----------------------------------------------------------------------
+from("direct:start")
+ .process(exchange -> {
+ // set the header you want the producer to evaluate, refer to the
previous
+ // section to learn about the headers that can be set
+ // e.g:
+ exchange.getIn().setHeader(QueueConstants.QUEUE_NAME, "overrideName");
+ })
+
.to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=clearQueue");
+-----------------------------------------------------------------------
+
+- `sendMessage`:
+
+[source,java]
+-----------------------------------------------------------------------
+from("direct:start")
+ .process(exchange -> {
+ // set the header you want the producer to evaluate, refer to the
previous
+ // section to learn about the headers that can be set
+ // e.g:
+ exchange.getIn().setHeader(QueueConstants.MESSAGE_TEXT, "message to
send");
+ // we set a visibility of 1min
+ exchange.getIn().setHeader(QueueConstants.VISIBILITY_TIMEOUT,
Duration.ofMinutes(1));
+ })
+ .to("azure-storage-queue://cameldev/test?serviceClient=#client");
+-----------------------------------------------------------------------
+
+- `deleteMessage`:
+
+[source,java]
+-----------------------------------------------------------------------
+from("direct:start")
+ .process(exchange -> {
+ // set the header you want the producer to evaluate, refer to the
previous
+ // section to learn about the headers that can be set
+ // e.g:
+ // Mandatory header:
+ exchange.getIn().setHeader(QueueConstants.MESSAGE_ID, "1");
+ // Mandatory header:
+ exchange.getIn().setHeader(QueueConstants.POP_RECEIPT,
"PAAAAHEEERXXX-1");
+ })
+
.to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=deleteMessage");
+-----------------------------------------------------------------------
+
+- `receiveMessages`:
+
+[source,java]
+-----------------------------------------------------------------------
+from("direct:start")
+
.to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=receiveMessages")
+ .process(exchange -> {
+ final List<QueueMessageItem> messageItems =
exchange.getMessage().getBody(List.class);
+ messageItems.forEach(messageItem ->
System.out.println(messageItem.getMessageText()));
+ })
+ .to("mock:result");
+-----------------------------------------------------------------------
+
+- `peekMessages`:
+
+[source,java]
+-----------------------------------------------------------------------
+from("direct:start")
+
.to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=peekMessages")
+ .process(exchange -> {
+ final List<PeekedMessageItem> messageItems =
exchange.getMessage().getBody(List.class);
+ messageItems.forEach(messageItem ->
System.out.println(messageItem.getMessageText()));
+ })
+ .to("mock:result");
+-----------------------------------------------------------------------
+
+- `updateMessage`:
+
+[source,java]
+-----------------------------------------------------------------------
+from("direct:start")
+ .process(exchange -> {
+ // set the header you want the producer to evaluate, refer to the
previous
+ // section to learn about the headers that can be set
+ // e.g:
+ exchange.getIn().setHeader(QueueConstants.MESSAGE_TEXT, "new message
text");
+ // Mandatory header:
+ exchange.getIn().setHeader(QueueConstants.MESSAGE_ID, "1");
+ // Mandatory header:
+ exchange.getIn().setHeader(QueueConstants.POP_RECEIPT,
"PAAAAHEEERXXX-1");
+ // Mandatory header:
+ exchange.getIn().setHeader(QueueConstants.VISIBILITY_TIMEOUT,
Duration.ofMinutes(1));
+ })
+
.to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=updateMessage");
+-----------------------------------------------------------------------
+
+
+=== Development Notes (Important)
+When developing on this component, you will need to obtain your Azure
accessKey in order to run the integration tests. In addition to the mocked unit
tests
+you *will need to run the integration tests with every change you make or even
client upgrade as the Azure client can break things even on minor versions
upgrade.*
+To run the integration tests, on this component directory, run the following
maven command:
+----
+mvn verify -PfullTests -DaccountName=myacc -DaccessKey=mykey
+----
+Whereby `accountName` is your Azure account name and `accessKey` is the access
key being generated from Azure portal.