Azure Storage Blob Service (Deprecated)
Since Camel 2.19
Both producer and consumer are supported
The Azure Blob component supports storing and retrieving the blobs to/from Azure Storage Blob service.
Note: This component uses the legacy Azure SDK v8 and thus is Deprecated. There is another component Azure Storage Blob Component that uses the latest 12+ Azure SDK version.
Prerequisites
You must have a valid Windows Azure Storage account. More information is available at Azure Documentation Portal.
URI Format
azure-blob://accountName/containerName[/blobName][?options]
In most cases a blobName is required and the blob 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 download a blob content from the public block blob blockBlob
located on the container1
in the camelazure
storage account, use the following snippet:
from("azure-blob:/camelazure/container1/blockBlob").
to("file://blobdirectory");
URI Options
The Azure Storage Blob Service (Deprecated) component supports 22 options, which are listed below.
Name | Description | Default | Type |
---|---|---|---|
azureBlobClient (common) |
The blob service client |
CloudBlob |
|
blobOffset (common) |
Set the blob offset for the upload or download operations, default is 0 |
0 |
Long |
blobType (common) |
Set a blob type, 'blockblob' is default. There are 3 enums and the value can be one of: blockblob, appendblob, pageblob |
blockblob |
BlobType |
closeStreamAfterRead (common) |
Close the stream after read or keep it open, default is true |
true |
boolean |
credentials (common) |
Set the storage credentials, required in most cases |
StorageCredentials |
|
dataLength (common) |
Set the data length for the download or page blob upload operations |
Long |
|
fileDir (common) |
Set the file directory where the downloaded blobs will be saved to |
String |
|
publicForRead (common) |
Storage resources can be public for reading their content, if this property is enabled then the credentials do not have to be set |
false |
boolean |
streamReadSize (common) |
Set the minimum read size in bytes when reading the blob content |
int |
|
validateClientURI (common) |
Whether to validate the Azure client URI |
true |
boolean |
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 |
blobMetadata (producer) |
Set the blob meta-data |
Map |
|
blobPrefix (producer) |
Set a prefix which can be used for listing the blobs |
String |
|
closeStreamAfterWrite (producer) |
Close the stream after write or keep it open, default is true |
true |
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 starting the producer may take a little time and prolong the total processing time of the processing. |
false |
boolean |
operation (producer) |
Blob service operation hint to the producer. There are 14 enums and the value can be one of: getBlob, deleteBlob, listBlobs, updateBlockBlob, uploadBlobBlocks, commitBlobBlockList, getBlobBlockList, createAppendBlob, updateAppendBlob, createPageBlob, updatePageBlob, resizePageBlob, clearPageBlob, getPageBlobRanges |
listBlobs |
BlobServiceOperations |
streamWriteSize (producer) |
Set the size of the buffer for writing block and page blocks |
int |
|
useFlatListing (producer) |
Specify if the flat or hierarchical blob listing should be used |
true |
boolean |
autowiredEnabled (advanced) |
Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. |
true |
boolean |
configuration (advanced) |
The Blob Service configuration |
BlobServiceConfiguration |
|
credentialsAccountKey (security) |
Set the storage account key used during authentication phase |
String |
|
credentialsAccountName (security) |
Set the storage account name used during authentication phase |
String |
The Azure Storage Blob Service (Deprecated) endpoint is configured using URI syntax:
azure-blob:containerOrBlobUri
with the following path and query parameters:
Path Parameters (1 parameters):
Name | Description | Default | Type |
---|---|---|---|
containerOrBlobUri |
Required Container or Blob compact Uri |
String |
Query Parameters (23 parameters):
Name | Description | Default | Type |
---|---|---|---|
azureBlobClient (common) |
The blob service client |
CloudBlob |
|
blobOffset (common) |
Set the blob offset for the upload or download operations, default is 0 |
0 |
Long |
blobType (common) |
Set a blob type, 'blockblob' is default. There are 3 enums and the value can be one of: blockblob, appendblob, pageblob |
blockblob |
BlobType |
closeStreamAfterRead (common) |
Close the stream after read or keep it open, default is true |
true |
boolean |
credentials (common) |
Set the storage credentials, required in most cases |
StorageCredentials |
|
dataLength (common) |
Set the data length for the download or page blob upload operations |
Long |
|
fileDir (common) |
Set the file directory where the downloaded blobs will be saved to |
String |
|
publicForRead (common) |
Storage resources can be public for reading their content, if this property is enabled then the credentials do not have to be set |
false |
boolean |
streamReadSize (common) |
Set the minimum read size in bytes when reading the blob content |
int |
|
validateClientURI (common) |
Whether to validate the Azure client URI |
true |
boolean |
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. There are 3 enums and the value can be one of: InOnly, InOut, InOptionalOut |
ExchangePattern |
|
blobMetadata (producer) |
Set the blob meta-data |
Map |
|
blobPrefix (producer) |
Set a prefix which can be used for listing the blobs |
String |
|
closeStreamAfterWrite (producer) |
Close the stream after write or keep it open, default is true |
true |
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 starting the producer may take a little time and prolong the total processing time of the processing. |
false |
boolean |
operation (producer) |
Blob service operation hint to the producer. There are 14 enums and the value can be one of: getBlob, deleteBlob, listBlobs, updateBlockBlob, uploadBlobBlocks, commitBlobBlockList, getBlobBlockList, createAppendBlob, updateAppendBlob, createPageBlob, updatePageBlob, resizePageBlob, clearPageBlob, getPageBlobRanges |
listBlobs |
BlobServiceOperations |
streamWriteSize (producer) |
Set the size of the buffer for writing block and page blocks |
int |
|
useFlatListing (producer) |
Specify if the flat or hierarchical blob listing should be used |
true |
boolean |
synchronous (advanced) |
Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). |
false |
boolean |
credentialsAccountKey (security) |
Set the storage account key used during authentication phase |
String |
|
credentialsAccountName (security) |
Set the storage account name used during authentication phase |
String |
Required Azure Storage Blob Service component options
You have to provide the containerOrBlob name and the credentials if the private blob needs to be accessed.
Usage
Message headers set by the Azure Storage Blob Service producer
Header | Type | Description |
---|---|---|
|
|
The file name for the downloaded blob content. |
Message headers set by the Azure Storage Blob Service producer consumer
Header | Type | Description |
---|---|---|
|
|
The file name for the downloaded blob content. |
Azure Blob Service operations
Operations common to all block types
Operation | Description |
---|---|
|
Get the content of the blob. You can restrict the output of this operation to a blob range. |
|
Delete the blob. |
|
List the blobs. |
Block blob operations
Operation | Description |
---|---|
|
Put block blob content that either creates a new block blob or overwrites the existing block blob content. |
|
Upload block blob content, by first generating a sequence of blob blocks and then committing them to a blob. If you enable the message CommitBlockListLater property, you can execute the commit later with the |
|
Commit a sequence of blob blocks to the block list that you previously uploaded to the blob service (by using the |
|
Get the block blob list. |
Append blob operations
Operation | Description |
---|---|
|
Create an append block. By default, if the block already exists then it is not reset. Note that you can alternately create an append blob by enabling the message AppendBlobCreated property and using the |
|
Append the new content to the blob. This operation also creates the blob if it does not already exist and if you enabled a message AppendBlobCreated property. |
Page Block operations
Operation | Description |
---|---|
|
Create a page block. By default, if the block already exists then it is not reset. Note that you can also create a page blob (and set its contents) by enabling a message PageBlobCreated property and by using the |
|
Create a page block (unless you enable a message PageBlobCreated property and the identically named block already exists) and set the content of this blob. |
|
Resize the page blob. |
|
Clear the page blob. |
|
Get the page blob page ranges. |
Azure Blob Client configuration
If your Camel application is running behind a firewall or if you need more control over the Azure Blob Client configuration, you can create your own instance:
StorageCredentials credentials = new StorageCredentialsAccountAndKey(accountName, accessKey);
CloudBlob client = new CloudBlockBlob(URI.create("https://"
+ accountName + ".blob.core.windows.net/" + containerName
+ "/" + fileName), credentials);
registry.bind("azureBlobClient", client);
Then refer to this instance in your Camel azure-blob
component configuration:
from("azure-blob://" + accountName + "/" + containerName + "/" + fileName + "?azureBlobClient=#client")
.to("mock:result");
Dynamic blob names
The producer supports overriding the default blob name from a message header as shown below:
.setHeader("CamelAzureOverrideBlobName", constant("myNewBlob"))
.to("azure-blob://myacount/mycontainer/myblob")
Here the producer would normally use myBlob
as the blob name, but the header will override this and use
myNewBlob
instead. This allow for dynamic blob names.
Dependencies
Maven users will need to add the following dependency to their pom.xml
.
pom.xml
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-azure</artifactId>
<version>${camel-version}</version>
</dependency>
where ${camel-version}
must be replaced by the actual version of Camel.
Spring Boot Auto-Configuration
When using azure with Spring Boot make sure to use the following Maven dependency to have support for auto configuration:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-azure-starter</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
The component supports 37 options, which are listed below.
Name | Description | Default | Type |
---|---|---|---|
camel.component.azure-blob.autowired-enabled |
Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. |
true |
Boolean |
camel.component.azure-blob.azure-blob-client |
The blob service client. The option is a com.microsoft.azure.storage.blob.CloudBlob type. |
CloudBlob |
|
camel.component.azure-blob.blob-metadata |
Set the blob meta-data |
Map |
|
camel.component.azure-blob.blob-offset |
Set the blob offset for the upload or download operations, default is 0 |
0 |
Long |
camel.component.azure-blob.blob-prefix |
Set a prefix which can be used for listing the blobs |
String |
|
camel.component.azure-blob.blob-type |
Set a blob type, 'blockblob' is default |
BlobType |
|
camel.component.azure-blob.bridge-error-handler |
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 |
camel.component.azure-blob.close-stream-after-read |
Close the stream after read or keep it open, default is true |
true |
Boolean |
camel.component.azure-blob.close-stream-after-write |
Close the stream after write or keep it open, default is true |
true |
Boolean |
camel.component.azure-blob.configuration |
The Blob Service configuration. The option is a org.apache.camel.component.azure.blob.BlobServiceConfiguration type. |
BlobServiceConfiguration |
|
camel.component.azure-blob.credentials |
Set the storage credentials, required in most cases. The option is a com.microsoft.azure.storage.StorageCredentials type. |
StorageCredentials |
|
camel.component.azure-blob.credentials-account-key |
Set the storage account key used during authentication phase |
String |
|
camel.component.azure-blob.credentials-account-name |
Set the storage account name used during authentication phase |
String |
|
camel.component.azure-blob.data-length |
Set the data length for the download or page blob upload operations |
Long |
|
camel.component.azure-blob.enabled |
Whether to enable auto configuration of the azure-blob component. This is enabled by default. |
Boolean |
|
camel.component.azure-blob.file-dir |
Set the file directory where the downloaded blobs will be saved to |
String |
|
camel.component.azure-blob.lazy-start-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 starting the producer may take a little time and prolong the total processing time of the processing. |
false |
Boolean |
camel.component.azure-blob.operation |
Blob service operation hint to the producer |
BlobServiceOperations |
|
camel.component.azure-blob.public-for-read |
Storage resources can be public for reading their content, if this property is enabled then the credentials do not have to be set |
false |
Boolean |
camel.component.azure-blob.stream-read-size |
Set the minimum read size in bytes when reading the blob content |
Integer |
|
camel.component.azure-blob.stream-write-size |
Set the size of the buffer for writing block and page blocks |
Integer |
|
camel.component.azure-blob.use-flat-listing |
Specify if the flat or hierarchical blob listing should be used |
true |
Boolean |
camel.component.azure-blob.validate-client-u-r-i |
Whether to validate the Azure client URI |
true |
Boolean |
camel.component.azure-queue.autowired-enabled |
Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. |
true |
Boolean |
camel.component.azure-queue.azure-queue-client |
The queue service client. The option is a com.microsoft.azure.storage.queue.CloudQueue type. |
CloudQueue |
|
camel.component.azure-queue.bridge-error-handler |
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 |
camel.component.azure-queue.configuration |
The Queue Service configuration. The option is a org.apache.camel.component.azure.queue.QueueServiceConfiguration type. |
QueueServiceConfiguration |
|
camel.component.azure-queue.credentials |
Set the storage credentials, required in most cases. The option is a com.microsoft.azure.storage.StorageCredentials type. |
StorageCredentials |
|
camel.component.azure-queue.credentials-account-key |
Set the storage account key used during authentication phase |
String |
|
camel.component.azure-queue.credentials-account-name |
Set the storage account name used during authentication phase |
String |
|
camel.component.azure-queue.enabled |
Whether to enable auto configuration of the azure-queue component. This is enabled by default. |
Boolean |
|
camel.component.azure-queue.lazy-start-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 starting the producer may take a little time and prolong the total processing time of the processing. |
false |
Boolean |
camel.component.azure-queue.message-time-to-live |
Message Time To Live in seconds |
Integer |
|
camel.component.azure-queue.message-visibility-delay |
Message Visibility Delay in seconds |
Integer |
|
camel.component.azure-queue.operation |
Queue service operation hint to the producer |
QueueServiceOperations |
|
camel.component.azure-queue.queue-prefix |
Set a prefix which can be used for listing the queues |
String |
|
camel.component.azure-queue.validate-client-u-r-i |
Whether to validate the Azure client URI |
true |
Boolean |