你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于 .NET 的 Azure 存储 Blob 更改源客户端库 - 版本 12.0.0-preview.40

服务器版本:2021-02-12, 2020-12-06、2020-10-02、2020-08-04、2020-06-12 2020-04-08、2020-02-10 和 2019-12-12

更改源的用途是提供存储帐户中 Blob 和 Blob 元数据发生的所有更改的事务日志。 更改源提供这些更改的有序、有保证、持久、不可变、只读的日志。 客户端应用程序可以随时读取这些日志。 使用更改源可以生成高效且可缩放的解决方案,因此能够以较低的成本处理 Blob 存储帐户中发生的更改事件。

源代码 | 包 (NuGet) | 产品文档

入门

安装包

使用 NuGet 安装适用于 .NET 的 Azure 存储 Blob 客户端库:

dotnet add package Azure.Storage.Blobs.ChangeFeed --prerelease

先决条件

需要 Azure 订阅存储帐户 才能使用此包。

若要创建新的存储帐户,可以使用 Azure 门户Azure PowerShellAzure CLI。 下面是使用 Azure CLI 的示例:

az storage account create --name MyStorageAccount --resource-group MyResourceGroup --location westus --sku Standard_LRS

对客户端进行身份验证

身份验证的工作方式与 在 Azure.Storage.Blobs 中的工作方式相同。

关键概念

更改源作为 Blob 存储在存储帐户中的特殊容器内,按标准的 Blob 定价计费。 你可以根据要求控制这些文件的保留期(请参阅当前版本的条件)。 更改事件根据 Apache Avro 格式(一种简洁且快速的二进制格式,通过内联架构提供丰富的数据结构)规范以记录的形式追加到更改源。 这种格式广泛用于 Hadoop 生态系统、流分析和 Azure 数据工厂。

可以增量或完全处理这些日志。 任意数目的客户端应用程序都可以按照自身的步调单独并行读取更改源。 分析应用程序(例如 Apache Drill 或 Apache Spark)可以直接将日志用作 Avro 文件,使你能够以较低的成本和较高的带宽处理这些日志,而无需编写自定义应用程序。

线程安全

我们保证所有客户端实例方法都是线程安全的,并且相互独立, (准则) 。 这可确保重用客户端实例的建议始终是安全的,即使跨线程也是如此。

其他概念

客户端选项 | 访问响应 | 长时间运行的操作 | 处理失败 | 诊断 | 嘲笑 | 客户端生存期

示例

获取更改源中的所有事件

// Get all the events in the change feed.
List<BlobChangeFeedEvent> changeFeedEvents = new List<BlobChangeFeedEvent>();
await foreach (BlobChangeFeedEvent changeFeedEvent in changeFeedClient.GetChangesAsync())
{
    changeFeedEvents.Add(changeFeedEvent);
}

获取开始和结束时间之间的事件

// Create the start and end time.  The change feed client will round start time down to
// the nearest hour, and round endTime up to the next hour if you provide DateTimeOffsets
// with minutes and seconds.
DateTimeOffset startTime = new DateTimeOffset(2017, 3, 2, 15, 0, 0, TimeSpan.Zero);
DateTimeOffset endTime = new DateTimeOffset(2020, 10, 7, 2, 0, 0, TimeSpan.Zero);

// You can also provide just a start or end time.
await foreach (BlobChangeFeedEvent changeFeedEvent in changeFeedClient.GetChangesAsync(
    start: startTime,
    end: endTime))
{
    changeFeedEvents.Add(changeFeedEvent);
}

使用 continuationToken 恢复

string continuationToken = null;
await foreach (Page<BlobChangeFeedEvent> page in changeFeedClient.GetChangesAsync().AsPages(pageSizeHint: 10))
{
    foreach (BlobChangeFeedEvent changeFeedEvent in page.Values)
    {
        changeFeedEvents.Add(changeFeedEvent);
    }

    // Get the change feed continuation token.  The continuation token is not required to get each page of events,
    // it is intended to be saved and used to resume iterating at a later date.
    continuationToken = page.ContinuationToken;
    break;
}

// Resume iterating from the pervious position with the continuation token.
await foreach (BlobChangeFeedEvent changeFeedEvent in changeFeedClient.GetChangesAsync(
    continuationToken: continuationToken))
{
    changeFeedEvents.Add(changeFeedEvent);
}

故障排除

所有 Blob 服务操作都会在失败时引发 RequestFailedException ,并具有有用的 ErrorCodes。 其中许多错误是可恢复的。

后续步骤

更改 源示例入门:

  1. Hello World: (或异步) 获取存储帐户中发生的更改
  2. 身份验证:使用连接字符串、公共访问、共享密钥、共享访问签名和 Azure Active Directory 进行身份验证。

贡献

有关生成、测试和参与此库的详细信息,请参阅 存储 CONTRIBUTING.md

本项目欢迎贡献和建议。 大多数贡献要求你同意贡献者许可协议 (CLA),并声明你有权(并且确实有权)授予我们使用你的贡献的权利。 有关详细信息,请访问 cla.microsoft.com

此项目采用了 Microsoft 开放源代码行为准则。 有关详细信息,请参阅行为准则常见问题解答,或如果有任何其他问题或意见,请与 联系。