配置ADO.NET提供程序
Orleans的任何可靠部署,都需要使用持久化存储来保持系统的状态,特别是Orleans集群成员身份表和提醒器(Reminder)。可用的选项之一,是通过ADO.NET提供程序来使用SQL数据库。
为了将ADO.NET用于持久性,集群或提醒器,需要将ADO.NET提供程序配置为silo配置的一部分,并且在群集的情况下,还需要将其配置为客户端配置的一部分。
silo配置代码应如下所示:
var siloHostBuilder = new SiloHostBuilder();
var invariant = "System.Data.SqlClient"; // for Microsoft SQL Server
var connectionString = "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Orleans;Integrated Security=True;Pooling=False;Max Pool Size=200;Asynchronous Processing=True;MultipleActiveResultSets=True";
//use AdoNet for clustering
siloHostBuilder.UseAdoNetClustering(options =>
{
options.Invariant = invariant;
options.ConnectionString = connectionString;
});
//use AdoNet for reminder service
siloHostBuilder.UseAdoNetReminderService(options =>
{
options.Invariant = invariant;
options.ConnectionString = connectionString;
});
//use AdoNet for Persistence
siloHostBuilder.AddAdoNetGrainStorage("GrainStorageForTest", options =>
{
options.Invariant = invariant;
options.ConnectionString = connectionString;
});
客户端配置代码应如下所示:
var siloHostBuilder = new SiloHostBuilder();
var invariant = "System.Data.SqlClient";
var connectionString = "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Orleans;Integrated Security=True;Pooling=False;Max Pool Size=200;Asynchronous Processing=True;MultipleActiveResultSets=True";
//use AdoNet for clustering
siloHostBuilder.UseAdoNetClustering(options =>
{
options.Invariant = invariant;
options.ConnectionString = connectionString;
});
其中,ConnectionString
被设置为有效的AdoNet 服务器连接字符串。
为了使用ADO.NET提供程序用于持久化、提醒器或集群,有一些用于创建数据库工件的脚本,所有将承载Orleans silo的服务器,都需要访问这些脚本。缺少对目标数据库的访问,是我们看到开发人员犯的一个典型错误。
在AdoNet扩展的nuget上安装或执行nuget还原后,脚本被复制到项目目录\ OrleansAdoNetContent,其中每个受支持的ADO.NET扩展都有自己的目录。我们将AdoNet nugets拆分为每个功能单元:Microsoft.Orleans.Clustering.AdoNet
用于群集,Microsoft.Orleans.Persistence.AdoNet
用于持久性和Microsoft.Orleans.Reminders.AdoNet
用于提醒器。