8.5. 使用方法


例如,要从 camelazure 存储帐户中的 container1 上的 block blob hello.txt 下载 blob 内容,请使用以下代码片段:

from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accessKey=yourAccessKey").
to("file://blobdirectory");

8.5.1. 由组件制作者评估的消息标头

标头变量名称类型操作描述

CamelAzureStorageBlobTimeout

BlobConstants.TIMEOUT

Duration

All

将引发 {@link RuntimeException} 的可选超时值。

CamelAzureStorageBlobMetadata

BlobConstants.METADATA

map<String,String>

与容器和 blob 相关的操作

与容器或 blob 关联的元数据。

CamelAzureStorageBlobPublicAccessType

BlobConstants.PUBLIC_ACCESS_TYPE

PublicAccessType

createContainer

指定此容器中的数据如何可供公共使用。传递 null 以进行公共访问。

CamelAzureStorageBlobRequestCondition

BlobConstants.BLOB_REQUEST_CONDITION

BlobRequestConditions

与容器和 blob 相关的操作

这将包含值,这会将各种请求的成功操作限制为存在的条件。这些条件完全是可选的。

CamelAzureStorageBlobListDetails

BlobConstants.BLOB_LIST_DETAILS

BlobListDetails

listBlobs

列出特定 Blob 的详细信息

CamelAzureStorageBlobPrefix

BlobConstants.PREFIX

字符串

listBlobs,getBlob

过滤结果,以仅返回名称以指定前缀开头的 Blob。可能为空,返回所有 Blob。

CamelAzureStorageBlobMaxResultsPerPage

BlobConstants.MAX_RESULTS_PER_PAGE

整数

listBlobs

指定要返回的最大 Blob 数量,包括所有 BlobPrefix 元素。如果请求没有指定 maxResultsPerPage 或指定大于 5,000 的值,服务器将返回到 5,000 个项目。

CamelAzureStorageBlobListBlobOptions

BlobConstants.LIST_BLOB_OPTIONS

ListBlobsOptions

listBlobs

定义可用于配置 {@link BlobContainerClient} 对象上对 listBlobsFlatSegment 的调用行为的选项。

CamelAzureStorageBlobHttpHeaders

BlobConstants.BLOB_HTTP_HEADERS

BlobHttpHeaders

uploadBlockBlob, commitBlobBlockList, createAppendBlob, createPageBlob

一组操作的其他参数。

CamelAzureStorageBlobAccessTier

BlobConstants.ACCESS_TIER

AccessTier

uploadBlockBlob, commitBlobBlockList

定义 AccessTier 的值。

CamelAzureStorageBlobContentMD5

BlobConstants.CONTENT_MD5

byte[]

大多数与上传 blob 相关的操作

块内容的 MD5 哈希。此哈希用于在传输过程中验证块的完整性。当指定此标头时,存储服务会将已到达此标头值的内容的哈希值进行比较。请注意,这个 MD5 哈希没有使用 blob 存储。如果两个哈希不匹配,则操作将失败。

CamelAzureStorageBlobPageBlobRange

BlobConstants.PAGE_BLOB_RANGE

PageRange

与页面 blob 相关的操作

{@link PageRange} 对象。由于页面必须与 512 字节边界一致,启动偏移必须是 modulus 为 512,最终偏移必须是 modulus 为 512 - 1。有效字节范围的示例为 0-511、512-1023 等。

CamelAzureStorageBlobCommitBlobBlockListLater

BlobConstants.COMMIT_BLOCK_LIST_LATER

布尔值

stageBlockBlobList

当设置为 true 时,暂存的块不会直接提交。

CamelAzureStorageBlobCreateAppendBlob

BlobConstants.CREATE_APPEND_BLOB

布尔值

commitAppendBlob

当设置为 true 时,会在提交附加块时创建附加块。

CamelAzureStorageBlobCreatePageBlob

BlobConstants.CREATE_PAGE_BLOB

布尔值

uploadPageBlob

当设置为 true 时,会在上传页面 blob 时创建页面 blob。

CamelAzureStorageBlobBlockListType

BlobConstants.BLOCK_LIST_TYPE

BlockListType

getBlobBlockList

指定要返回的块类型。

CamelAzureStorageBlobPageBlobSize

BlobConstants.PAGE_BLOB_SIZE

Long

createPageBlob, resizePageBlob

指定页面 blob 的最大大小,最多 8 TB。页面 blob 大小必须与 512 字节边界一致。

CamelAzureStorageBlobSequenceNumber

BlobConstants.BLOB_SEQUENCE_NUMBER

Long

createPageBlob

用户控制的值,可用于跟踪请求。序列号的值必须在 0 到 2^63 - 1 之间。默认值为 0。

CamelAzureStorageBlobDeleteSnapshotsOptionType

BlobConstants.DELETE_SNAPSHOT_OPTION_TYPE

DeleteSnapshotsOptionType

deleteBlob

指定删除此 blob 上的快照的行为。\{@code Include} 将删除基础 blob 和所有快照。\{@code Only} 将只删除快照。如果删除了快照,则必须传递 null。

CamelAzureStorageBlobListBlobContainersOptions

BlobConstants.LIST_BLOB_CONTAINERS_OPTIONS

ListBlobContainersOptions

listBlobContainers

{@link ListBlobContainersOptions},用于指定服务应返回哪些数据。

CamelAzureStorageBlobParallelTransferOptions

BlobConstants.PARALLEL_TRANSFER_OPTIONS

ParallelTransferOptions

downloadBlobToFile

{@link ParallelTransferOptions} 用于下载至文件。并行传输参数的数量将被忽略。

CamelAzureStorageBlobFileDir

BlobConstants.FILE_DIR

字符串

downloadBlobToFile

下载 Blob 将保存到的项目目录。

CamelAzureStorageBlobDownloadLinkExpiration

BlobConstants.DOWNLOAD_LINK_EXPIRATION

Long

downloadLink

覆盖 URL 下载链接的默认过期时间(millis)。

CamelAzureStorageBlobBlobName

BlobConstants.BLOB_NAME

字符串

与 blob 相关的操作

覆盖/设置交换标头中的 Blob 名称。

CamelAzureStorageBlobContainerName

BlobConstants.BLOB_CONTAINER_NAME

字符串

与容器和 blob 相关的操作

覆盖/设置交换标头中的容器名称。

CamelAzureStorageBlobOperation

BlobConstants.BLOB_OPERATION

BlobOperationsDefinition

All

指定要执行的制作者操作,请参阅此页面中的与制作者操作相关的 doc。

CamelAzureStorageBlobRegex

BlobConstants.REGEX

字符串

listBlobs,getBlob

过滤结果,以仅返回名称与指定正则表达式匹配的 Blob。可能为空以返回所有.如果同时设置了 prefix 和 regex,则 regex 将采用优先级和前缀。

CamelAzureStorageBlobChangeFeedStartTime

BlobConstants.CHANGE_FEED_START_TIME

OffsetDateTime

getChangeFeed

它过滤结果,以大约在开始时间后返回事件。注意:也可以返回属于上小时的几个事件。可以缺少属于此小时的几个事件;若要确保所有事件都返回,每小时舍入开始时间。

CamelAzureStorageBlobChangeFeedEndTime

BlobConstants.CHANGE_FEED_END_TIME

OffsetDateTime

getChangeFeed

它过滤结果,以大约在结束时间前返回事件。注意:也可以返回属于下一小时的几个事件。可以缺少属于此小时的几个事件;若要确保所有事件都返回,每小时舍入结束时间。

CamelAzureStorageBlobChangeFeedContext

BlobConstants.CHANGE_FEED_CONTEXT

Context

getChangeFeed

这提供了在服务调用过程中通过 Http 管道传递的额外上下文。

CamelAzureStorageBlobSourceBlobAccountName

BlobConstants.SOURCE_BLOB_ACCOUNT_NAME

字符串

copyBlob

在 copy blob 操作中用作源帐户名称的源 blob 帐户名称

CamelAzureStorageBlobSourceBlobContainerName

BlobConstants.SOURCE_BLOB_CONTAINER_NAME

字符串

copyBlob

在 copy blob 操作中用作源容器名称的源 blob 容器名称

8.5.2. 由组件制作者或消费者设置的消息标头

标头变量名称类型描述

CamelAzureStorageBlobAccessTier

BlobConstants.ACCESS_TIER

AccessTier

blob 的访问层。

CamelAzureStorageBlobAccessTierChangeTime

BlobConstants.ACCESS_TIER_CHANGE_TIME

OffsetDateTime

blob 最后更改的访问层时的日期。

CamelAzureStorageBlobArchiveStatus

BlobConstants.ARCHIVE_STATUS

ArchiveStatus

blob 的归档状态。

CamelAzureStorageBlobCreationTime

BlobConstants.CREATION_TIME

OffsetDateTime

blob 的创建时间。

CamelAzureStorageBlobSequenceNumber

BlobConstants.BLOB_SEQUENCE_NUMBER

Long

页面 blob 的当前序列号。

CamelAzureStorageBlobBlobSize

BlobConstants.BLOB_SIZE

long

blob 的大小。

CamelAzureStorageBlobBlobType

BlobConstants.BLOB_TYPE

BlobType

blob 的类型。

CamelAzureStorageBlobCacheControl

BlobConstants.CACHE_CONTROL

字符串

为 blob 指定的缓存控制。

CamelAzureStorageBlobCommittedBlockCount

BlobConstants.COMMITTED_BLOCK_COUNT

整数

提交到附加 blob 的块数

CamelAzureStorageBlobContentDisposition

BlobConstants.CONTENT_DISPOSITION

字符串

为 blob 指定的内容分布。

CamelAzureStorageBlobContentEncoding

BlobConstants.CONTENT_ENCODING

字符串

为 blob 指定的内容编码。

CamelAzureStorageBlobContentLanguage

BlobConstants.CONTENT_LANGUAGE

字符串

为 blob 指定的内容语言。

CamelAzureStorageBlobContentMd5

BlobConstants.CONTENT_MD5

byte[]

为 blob 指定的内容 MD5。

CamelAzureStorageBlobContentType

BlobConstants.CONTENT_TYPE

字符串

为 blob 指定的内容类型。

CamelAzureStorageBlobCopyCompletionTime

BlobConstants.COPY_COMPILATION_TIME

OffsetDateTime

blob 已完成上一次副本操作时。

CamelAzureStorageBlobCopyDestinationSnapshot

BlobConstants.COPY_DESTINATION_SNAPSHOT

字符串

blob 最后一次增量复制快照的快照标识符。

CamelAzureStorageBlobCopyId

BlobConstants.COPY_ID

字符串

blob 上执行的最后一个复制操作的标识符。

CamelAzureStorageBlobCopyProgress

BlobConstants.COPY_PROGRESS

字符串

对 blob 执行的最后一个复制操作的进度。

CamelAzureStorageBlobCopySource

BlobConstants.COPY_SOURCE

字符串

对 blob 执行的最后一个复制操作的源。

CamelAzureStorageBlobCopyStatus

BlobConstants.COPY_STATUS

CopyStatusType

对 blob 执行的最后一个复制操作的状态。

CamelAzureStorageBlobCopyStatusDescription

BlobConstants.COPY_STATUS_DESCRIPTION

字符串

blob 上最后一次复制操作的描述。

CamelAzureStorageBlobETag

BlobConstants.E_TAG

字符串

blob 的 E Tag

CamelAzureStorageBlobIsAccessTierInferred

BlobConstants.IS_ACCESS_TIER_INFRRRED

布尔值

表示 blob 的访问层是否从 blob 的属性中推断出来。

CamelAzureStorageBlobIsIncrementalCopy

BlobConstants.IS_INCREMENTAL_COPY

布尔值

指明 blob 是否递增复制的标记。

CamelAzureStorageBlobIsServerEncrypted

BlobConstants.IS_SERVER_ENCRYPTED

布尔值

指明 blob 内容是否在服务器中加密的标志。

CamelAzureStorageBlobLastModified

BlobConstants.LAST_MODIFIED

OffsetDateTime

最后一次修改 blob 时的日期时间。

CamelAzureStorageBlobLeaseDuration

BlobConstants.LEASE_DURATION

LeaseDurationType

blob 中的租期类型。

CamelAzureStorageBlobLeaseState

BlobConstants.LEASE_STATE

LeaseStateType

blob 上租期的状态。

CamelAzureStorageBlobLeaseStatus

BlobConstants.LEASE_STATUS

LeaseStatusType

blob 上租期的状态。

CamelAzureStorageBlobMetadata

BlobConstants.METADATA

Map<String, String>

与 blob 关联的其他元数据。

CamelAzureStorageBlobAppendOffset

BlobConstants.APPEND_OFFSET

字符串

块提交到块 blob 的偏移。

CamelAzureStorageBlobFileName

BlobConstants.FILE_NAME

字符串

从操作 downloadBlobToFile 下载的文件名。

CamelAzureStorageBlobDownloadLink

BlobConstants.DOWNLOAD_LINK

字符串

downloadLink 操作生成的下载链接。

CamelAzureStorageBlobRawHttpHeaders

BlobConstants.RAW_HTTP_HEADERS

HttpHeaders

返回可由用户使用的非解析的 httpHeaders。

8.5.3. 高级 Azure Storage Blob 配置

如果您的 Camel 应用程序在防火墙后面运行,或者需要对 BlobServiceClient 实例配置拥有更多控制,您可以创建自己的实例:

StorageSharedKeyCredential credential = new StorageSharedKeyCredential("yourAccountName", "yourAccessKey");
String uri = String.format("https://%s.blob.core.windows.net", "yourAccountName");

BlobServiceClient client = new BlobServiceClientBuilder()
                          .endpoint(uri)
                          .credential(credential)
                          .buildClient();
// This is camel context
context.getRegistry().bind("client", client);

然后,在 Camel azure-storage-blob 组件配置中引用这个实例:

from("azure-storage-blob://cameldev/container1?blobName=myblob&serviceClient=#client")
.to("mock:result");

8.5.4. 在 registry 中自动检测 BlobServiceClient 客户端

组件可以在 registry 中检测 BlobServiceClient bean 的存在。如果是该类型的唯一实例,它将用作客户端,并且不必将它定义为 uri 参数,如上例所示。这可能对端点的更智能配置非常有用。

8.5.5. Azure Storage Blob Producer 操作

Camel Azure Storage Blob 组件在制作者端提供广泛的操作:

服务级别的操作

对于这些操作,需要 accountName

操作描述

listBlobContainers

获取 blob 的内容。您可以将此操作的输出限制为 blob 范围。

getChangeFeed

返回存储帐户中所有更改的事务日志,以及您的存储帐户中的 blob 元数据。更改源提供有顺序、有保证、持久、不可变的、这些更改的只读日志。

容器级别的操作

对于这些操作,需要 accountNamecontainerName

操作描述

createBlobContainer

在存储帐户内创建新容器。如果存在具有相同名称的容器,则制作者将忽略它。

deleteBlobContainer

删除存储帐户中指定的容器。如果容器不存在,操作会失败。

listBlobs

返回此容器中的 Blob 列表,以及文件夹结构扁平化。

blob 级别的操作

对于这些操作,需要 accountNamecontainerNameblobName

操作blob 类型描述

getBlob

Common

获取 blob 的内容。您可以将此操作的输出限制为 blob 范围。

deleteBlob

Common

删除 blob。

downloadBlobToFile

Common

将整个 blob 下载到路径指定的文件中。如果文件已存在一个 {@link FileAlreadyExistsException},则文件必须不存在。

downloadLink

Common

使用共享访问签名(SAS)为指定的 blob 生成下载链接。默认情况下,此限制仅限制为 1 小时允许访问。但是,您可以通过标头覆盖默认的过期持续时间。

uploadBlockBlob

BlockBlob

创建新的块 blob,或更新现有块 blob 的内容。更新现有的块 blob 覆盖 blob 上的任何现有元数据。PutBlob 不支持部分更新;新内容会覆盖现有 blob 的内容。

stageBlockBlobList

BlockBlob

将指定的块上传到块 blob 的"staging 区域",以便稍后由调用提交到 commitBlobBlockList。但是,如果标头 CamelAzureStorageBlobCommitBlobBlockListLater 或配置 commitBlockListLater 被设置为 false,这将在暂存块后立即提交块。

commitBlobBlockList

BlockBlob

通过指定要组成 blob 的块 ID 列表来写入 blob。要作为 blob 的一部分编写,块必须在之前的 stageBlockBlobList 操作中成功写入服务器。您可以调用 commitBlobBlockList 来更新 blob,方法是仅上传已更改的块,然后将新的和现有的块一起提交在一起。所有未在块列表中指定的块,并永久删除。

getBlobBlockList

BlockBlob

使用指定的块列表过滤器,返回已作为块 blob 一部分的块列表。

createAppendBlob

AppendBlob

创建一个 0-length 附加 blob。调用 commitAppendBlo'b 操作,将数据附加到附加 blob 中。

commitAppendBlob

AppendBlob

将新数据块提交到现有 append blob 的末尾。如果标头 CamelAzureStorageBlobCreateAppendBlob 或配置 createAppendBlob 被设为 true,它将试图在提交前,首先通过内部调用 createAppendBlob 操作来创建 appendBlob。

createPageBlob

PageBlob

创建指定长度的页面 blob。调用 uploadPageBlob 操作,将数据上传到页面 blob。

uploadPageBlob

PageBlob

将一个或多个页面写入页面 blob。写入大小必须是 512 的倍数。如果标头 CamelAzureStorageBlobCreatePageBlob 或配置 createPageBlob 被设为 true,它将在上传前试图通过内部调用 createPageBlob 创建 appendBlob。

resizePageBlob

PageBlob

将页面 blob 调整为指定大小(必须是 512 的倍数)。

clearPageBlob

PageBlob

从 blob 页面释放指定的页面。范围的大小必须是 512 的倍数。

getPageBlobRanges

PageBlob

返回页面 blob 或页面 blob 快照的有效页面范围列表。

copyBlob

Common

将 blob 从一个容器复制到另一个容器,即使来自不同帐户。

请参阅此页面中的示例部分,了解如何在您的 camel 应用程序中使用这些操作。

8.5.6. 消费者示例

要使用文件组件将 blob 消耗到一个文件中,如下所示:

from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accountName=yourAccountName&accessKey=yourAccessKey").
to("file://blobdirectory");

但是,您还可以直接写入文件,而无需使用文件组件,您将需要指定 fileDir 文件夹路径,以便在机器中保存 blob。

from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accountName=yourAccountName&accessKey=yourAccessKey&fileDir=/var/to/awesome/dir").
to("mock:results");

此外,组件支持批处理使用者,因此您可以使用只指定容器名称的多个 Blob,因此消费者将根据容器中的 Blob 数量返回多个交换。

示例

from("azure-storage-blob://camelazure/container1?accountName=yourAccountName&accessKey=yourAccessKey&fileDir=/var/to/awesome/dir").
to("mock:results");

8.5.7. 制作者操作示例

  • listBlobContainers
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(BlobConstants.LIST_BLOB_CONTAINERS_OPTIONS, new ListBlobContainersOptions().setMaxResultsPerPage(10));
  })
  .to("azure-storage-blob://camelazure?operation=listBlobContainers&client&serviceClient=#client")
  .to("mock:result");
  • createBlobContainer
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(BlobConstants.BLOB_CONTAINER_NAME, "newContainerName");
  })
  .to("azure-storage-blob://camelazure/container1?operation=createBlobContainer&serviceClient=#client")
  .to("mock:result");
  • deleteBlobContainer:
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(BlobConstants.BLOB_CONTAINER_NAME, "overridenName");
  })
  .to("azure-storage-blob://camelazure/container1?operation=deleteBlobContainer&serviceClient=#client")
  .to("mock:result");
  • listBlobs
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(BlobConstants.BLOB_CONTAINER_NAME, "overridenName");
  })
  .to("azure-storage-blob://camelazure/container1?operation=listBlobs&serviceClient=#client")
  .to("mock:result");
  • getBlob

我们可以在交换正文中设置 outputStream,并将数据写入其中。例如:

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(BlobConstants.BLOB_CONTAINER_NAME, "overridenName");

    // set our body
    exchange.getIn().setBody(outputStream);
  })
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=getBlob&serviceClient=#client")
  .to("mock:result");

如果没有设置正文,则此操作会给我们提供一个 InputStream 实例,该实例可以进行进一步的下游:

from("direct:start")
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=getBlob&serviceClient=#client")
  .process(exchange -> {
      InputStream inputStream = exchange.getMessage().getBody(InputStream.class);
      // We use Apache common IO for simplicity, but you are free to do whatever dealing
      // with inputStream
      System.out.println(IOUtils.toString(inputStream, StandardCharsets.UTF_8.name()));
  })
  .to("mock:result");
  • deleteBlob
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(BlobConstants.BLOB_NAME, "overridenName");
  })
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=deleteBlob&serviceClient=#client")
  .to("mock:result");
  • downloadBlobToFile
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(BlobConstants.BLOB_NAME, "overridenName");
  })
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=downloadBlobToFile&fileDir=/var/mydir&serviceClient=#client")
  .to("mock:result");
  • downloadLink
from("direct:start")
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=downloadLink&serviceClient=#client")
  .process(exchange -> {
      String link = exchange.getMessage().getHeader(BlobConstants.DOWNLOAD_LINK, String.class);
      System.out.println("My link " + link);
  })
  .to("mock:result");
  • uploadBlockBlob
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(BlobConstants.BLOB_NAME, "overridenName");
    exchange.getIn().setBody("Block Blob");
  })
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=uploadBlockBlob&serviceClient=#client")
  .to("mock:result");
  • stageBlockBlobList
from("direct:start")
  .process(exchange -> {
      final List<BlobBlock> blocks = new LinkedList<>();
      blocks.add(BlobBlock.createBlobBlock(new ByteArrayInputStream("Hello".getBytes())));
      blocks.add(BlobBlock.createBlobBlock(new ByteArrayInputStream("From".getBytes())));
      blocks.add(BlobBlock.createBlobBlock(new ByteArrayInputStream("Camel".getBytes())));

      exchange.getIn().setBody(blocks);
  })
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=stageBlockBlobList&serviceClient=#client")
  .to("mock:result");
  • commitBlockBlobList
from("direct:start")
  .process(exchange -> {
      // We assume here you have the knowledge of these blocks you want to commit
      final List<Block> blocksIds = new LinkedList<>();
      blocksIds.add(new Block().setName("id-1"));
      blocksIds.add(new Block().setName("id-2"));
      blocksIds.add(new Block().setName("id-3"));

      exchange.getIn().setBody(blocksIds);
  })
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=commitBlockBlobList&serviceClient=#client")
  .to("mock:result");
  • getBlobBlockList
from("direct:start")
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=getBlobBlockList&serviceClient=#client")
  .log("${body}")
  .to("mock:result");
  • createAppendBlob
from("direct:start")
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=createAppendBlob&serviceClient=#client")
  .to("mock:result");
  • commitAppendBlob
from("direct:start")
  .process(exchange -> {
    final String data = "Hello world from my awesome tests!";
    final InputStream dataStream = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8));

    exchange.getIn().setBody(dataStream);

    // of course you can set whatever headers you like, refer to the headers section to learn more
  })
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=commitAppendBlob&serviceClient=#client")
  .to("mock:result");
  • createPageBlob
from("direct:start")
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=createPageBlob&serviceClient=#client")
  .to("mock:result");
  • uploadPageBlob
from("direct:start")
  .process(exchange -> {
    byte[] dataBytes = new byte[512]; // we set range for the page from 0-511
    new Random().nextBytes(dataBytes);
    final InputStream dataStream = new ByteArrayInputStream(dataBytes);
    final PageRange pageRange = new PageRange().setStart(0).setEnd(511);

    exchange.getIn().setHeader(BlobConstants.PAGE_BLOB_RANGE, pageRange);
    exchange.getIn().setBody(dataStream);
  })
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=uploadPageBlob&serviceClient=#client")
  .to("mock:result");
  • resizePageBlob
from("direct:start")
  .process(exchange -> {
    final PageRange pageRange = new PageRange().setStart(0).setEnd(511);

    exchange.getIn().setHeader(BlobConstants.PAGE_BLOB_RANGE, pageRange);
  })
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=resizePageBlob&serviceClient=#client")
  .to("mock:result");
  • clearPageBlob
from("direct:start")
  .process(exchange -> {
    final PageRange pageRange = new PageRange().setStart(0).setEnd(511);

    exchange.getIn().setHeader(BlobConstants.PAGE_BLOB_RANGE, pageRange);
  })
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=clearPageBlob&serviceClient=#client")
  .to("mock:result");
  • getPageBlobRanges
from("direct:start")
  .process(exchange -> {
    final PageRange pageRange = new PageRange().setStart(0).setEnd(511);

    exchange.getIn().setHeader(BlobConstants.PAGE_BLOB_RANGE, pageRange);
  })
  .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=getPageBlobRanges&serviceClient=#client")
  .log("${body}")
  .to("mock:result");
  • copyBlob
from("direct:copyBlob")
  .process(exchange -> {
    exchange.getIn().setHeader(BlobConstants.BLOB_NAME, "file.txt");
    exchange.getMessage().setHeader(BlobConstants.SOURCE_BLOB_CONTAINER_NAME, "containerblob1");
    exchange.getMessage().setHeader(BlobConstants.SOURCE_BLOB_ACCOUNT_NAME, "account");
  })
  .to("azure-storage-blob://account/containerblob2?operation=copyBlob&sourceBlobAccessKey=RAW(accessKey)")
  .to("mock:result");

这样,帐户 'account' 的容器 containerblob1 中的 file.txt 将复制到同一帐户的容器 containerblob2 中。

8.5.8. 开发备注(Important)

所有集成测试都使用 Testcontainers 并默认运行。需要获取 Azure accessKey 和 accountName,才能使用 Azure 服务运行所有集成测试。除了模拟的单元测试外,还需要针对您进行的每个更改运行集成测试,甚至客户端升级,因为 Azure 客户端即使在次版本升级时也会出现问题。要运行集成测试,在这个组件目录中运行以下 maven 命令:

mvn verify -PfullTests -DaccountName=myacc -DaccessKey=mykey

其中,by accountName 是 Azure 帐户名称,accessKey 是从 Azure 门户生成的访问密钥。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.