Orleans.Clustering.CosmosDB 3.0.4

建议的替代方案

Microsoft.Orleans.Clustering.Cosmos

其他细节

该项目已合并到 Orleans 主代码库。从 Orleans v7.2.0 版本开始,所有提供程序都随核心 Orleans 包一起发布到 NuGet。新的问题和贡献应导向 https://github.com/dotnet/orleans

dotnet add package Orleans.Clustering.CosmosDB --version 3.0.4                
NuGet\Install-Package Orleans.Clustering.CosmosDB -Version 3.0.4                
此命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Orleans.Clustering.CosmosDB" Version="3.0.4" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用包。
paket add Orleans.Clustering.CosmosDB --version 3.0.4                
#r "nuget: Orleans.Clustering.CosmosDB, 3.0.4"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此内容复制到交互工具或脚本的源代码中,以引用包。
// Install Orleans.Clustering.CosmosDB as a Cake Addin
#addin nuget:?package=Orleans.Clustering.CosmosDB&version=3.0.4

// Install Orleans.Clustering.CosmosDB as a Cake Tool
#tool nuget:?package=Orleans.Clustering.CosmosDB&version=3.0.4                

配置

不需要一次性使用所有提供程序。只需从示例中选择您感兴趣的一个即可,因为它们之间不互相依赖。

节点

示例


var silo = new SiloHostBuilder()
    .UseCosmosDBMembership(opt => 
    {
        // Use CosmosDB as the cluster membership table.
        // Configure CosmosDB settings in opt.
    }) 
    .AddCosmosDBGrainStorageAsDefault(opt => 
    {
        // Configure CosmosDB persistence provider.
        // Configure CosmosDB settings in opt.
    }) 
    .UseCosmosDBReminderService(op => 
    {
        // Configure CosmosDB reminders provider.
        // Configure CosmosDB settings in opt.
    }) 
    .Build();
await silo.StartAsync();

客户端

示例

var clientConfig = new ClientConfiguration();

var client = new ClientBuilder()
    .UseCosmosDBGatewayListProvider(opt => 
    {
        // Use CosmosDB as the Gateway list provider.
        // Configure CosmosDB settings in opt.
    }) 
    .Build();
    await client.Connect();

太好了!现在您已经配置了 Orleans,使其使用 Azure CosmosDB 作为其提供程序的后端存储!

存储提供程序的自定义分区键

默认情况下,使用 grain 类型作为分区键,但这限制了单个 grain 类型的存储大小,因为单个逻辑分区有最大 10 GB 的存储上限。

可以通过实现自定义 IPartitionKeyProvider 来覆盖默认设置。可以通过 dependency injection 的常规方法注册 IPartitionKeyProvider 的自定义实现。

services.AddSingleton<IPartitionKeyProvider, MyCustomPKProvider>();

还有几种 AddCosmosDBGrainStorageAddCosmosDBGrainStorageAsDefault 的重载,允许您传递 IPartitionKeyProvider 的实现。

如果没有使用 IPartitionKeyProvider,将使用默认值,它使用 grain 类型的完整名称作为分区键。

示例

public class PrimaryKeyPartitionKeyProvider : IPartitionKeyProvider
{
    public ValueTask<string> GetPartitionKey(string grainType, GrainReference grainReference) 
    {
        return new ValueTask<string>(grainReference.GetPrimaryKey().ToString());
    }
}

上面的示例使用主键作为分区键。

为了防止跨分区查询,分区键必须在读取数据时对客户端可用,因此代表输入仅限于 grain type 和 grain reference。Grain reference 包含 grain id,组合以及一个类型标识符。

有关 CosmosDB 分区详情的更多信息,请参阅 https://docs.microsoft.com/en-us/azure/cosmos-db/partitioning-overview

向下兼容性

此更改不会影响现有系统。为现有系统配置自定义分区键生成器将引发 BadGrainStorageConfigException,表明不兼容。要开始使用自定义分区键生成器,必须使用与选项中指定的 Func 代表相同的函数将旧文档更新为 /PartitionKey 属性。一旦所有文档都更新完毕,就必须使用 Azure Data Factory、CosmosDB 迁移工具或自定义代码将数据迁移到新的 CosmosDB 集合。

索引

当前的索引分支依赖于 CosmosDB 存储过程进行查找。因为存储过程必须针对特定分区执行,所以自定义分区键生成器与 Orleans 索引分支不兼容。

贡献

PR 和反馈都 非常 欢迎!

产品 兼容和额外的计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET 标准化 netstandard2.0 兼容。 netstandard2.1 已计算。
.NET 框架 net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET 标准 的信息。

NuGet 包

此包不使用任何 NuGet 包。

GitHub 仓库

此包不使用任何流行的 GitHub 仓库。

版本 下载 最后更新
3.0.4 37,549 6/16/2021 因为不再维护,3.0.4 已弃用。
3.0.3 2,224 4/24/2020
3.0.2 552 3/23/2020
3.0.1 767 1/29/2020
3.0.0 733 11/14/2019
1.3.0 938 4/3/2019
1.2.1 730 3/20/2019
1.2.0 718 3/19/2019
1.1.42 1,323 9/28/2018
1.1.41 822 9/28/2018
1.1.40 1,146 3/28/2018
1.1.38 1,016 3/28/2018
1.1.0-rc2-36 868 3/13/2018
1.1.0-rc1-34 861 3/12/2018
1.1.0-rc1-29 856 2/27/2018
1.0.1-preview-27 861 2/10/2018
1.0.1-preview-25 878 2/5/2018
1.0.1-preview-21 825 2/1/2018
1.0.1-preview-19 863 2/1/2018
1.0.0-preview-9 914 2/1/2018
1.0.0-preview-8 886 2/1/2018
1.0.0-preview-7 923 2/1/2018
1.0.0-preview-17 838 2/1/2018
1.0.0-preview-16 877 2/1/2018
1.0.0-preview-14 888 2/1/2018
1.0.0-preview-1 976 2/1/2018