本地开发配置

有关面向 Orleans 7.0 的工作示例应用程序,请参阅 Orleans:Hello World。 该示例将客户端和 silo 托管在适用于不同平台的 .NET 控制台应用程序中,而 grain 和接口则面向 .NET Standard 2.0。

提示

对于旧版本的 Orleans,请参阅 Orleans 示例项目

接收器配置

建议使用 Microsoft.Extensions.Hosting NuGet 包来配置和运行 silo。 此外,在开发 Orleans silo 时,需要 Microsoft.Orleans.Server NuGet 包。 对于本地 Orleans silo 开发,请配置 localhost 集群,该集群配置为使用环回地址。 若要使用 localhost 集群,请调用 UseLocalhostClustering 扩展方法。 请考虑 silo 主机的以下示例 Program.cs 文件:

using Microsoft.Extensions.Hosting;

await Host.CreateDefaultBuilder(args)
    .UseOrleans(siloBuilder =>
    {
        siloBuilder.UseLocalhostClustering();;
    })
    .RunConsoleAsync();

前面的代码:

  • 创建默认主机生成器。
  • 调用 UseOrleans 扩展方法以配置 silo。
  • 在给定的 ISiloBuilder 上调用 UseLocalhostClustering 扩展方法,以将 silo 配置为使用本地主机集群。
  • 链接 RunConsoleAsync 方法以将 silo 作为控制台应用程序运行。

有关本地开发,请参阅以下示例,了解如何针对这种情况配置 Silo。 它配置并启动一个用于侦听 loopback 地址的 silo,1111130000 分别作为 silo 端口和网关端口。

向项目添加 Microsoft.Orleans.Server NuGet 元包。

dotnet add package Microsoft.Orleans.Server

需要通过 ISiloBuilderConfigure 方法配置 ClusterOptions,指定你希望 LocalhostClustering 作为你的群集选择(其中此 silo 是主要的),然后配置 silo 终结点。

ConfigureApplicationParts 调用将带有 grain 类的程序集显式添加到应用程序设置中。 它还会添加由于 WithReferences 扩展而引用的任何程序集。 完成这些步骤后,将生成 silo 主机,并启动 silo。

可以创建一个面向 .NET Framework 4.6.1 或更高版本的空控制台应用程序项目(用于托管 silo)以及一个 .NET 控制台应用程序。

下面是如何启动本地 silo 的示例:

try
{
    var host = await BuildAndStartSiloAsync();

    Console.WriteLine("Press Enter to terminate...");
    Console.ReadLine();

    await host.StopAsync();
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}

static async Task<ISiloHost> BuildAndStartSiloAsync()
{
    var host = new HostBuilder()
      .UseOrleans(builder =>
      {
          builder.UseLocalhostClustering()
              .Configure<ClusterOptions>(options =>
              {
                  options.ClusterId = "dev";
                  options.ServiceId = "MyAwesomeService";
              })
              .Configure<EndpointOptions>(
                  options => options.AdvertisedIPAddress = IPAddress.Loopback)
              .ConfigureLogging(logging => logging.AddConsole());
      })
      .Build();

    await host.StartAsync();

    return host;
}

客户端配置

建议使用 Microsoft.Extensions.Hosting NuGet 包来配置和运行客户端(以及 silo)。 也需要 Microsoft.Orleans.Client NuGet 包。 若要在使用客户端上使用本地主机集群,请调用 UseLocalhostClustering 扩展方法。 请考虑客户端主机的以下示例 Program.cs 文件:

using Microsoft.Extensions.Hosting;

using IHost host = Host.CreateDefaultBuilder(args)
    .UseOrleansClient(client =>
    {
        client.UseLocalhostClustering();
    })
    .UseConsoleLifetime()
    .Build();

await host.StartAsync();

前面的代码:

  • 创建默认主机生成器。
  • 调用 UseOrleansClient 扩展方法以配置客户端。
  • 在给定的 IClientBuilder 上调用 UseLocalhostClustering 扩展方法,以将客户端配置为使用本地主机集群。
  • 调用 UseConsoleLifetime 扩展方法,将客户端配置为使用控制台生存期。
  • host 变量调用 StartAsync 方法以启动客户端。

有关本地开发,请参阅以下示例,了解如何针对这种情况配置客户端。 它将配置要连接到 loopback silo 的客户端。

向项目添加 Microsoft.Orleans.Client NuGet 元包。 熟悉 API 后,可以改为挑选并选择 Microsoft.Orleans.Client 中包含的实际所需的确切包,然后引用它们。

Install-Package Microsoft.Orleans.Client

需要使用与你为本地 silo 指定的 ID 匹配的群集 ID 配置 ClientBuilder,并指定静态群集作为你的群集选择,将其指向 silo 的网关端口

ConfigureApplicationParts 调用将带有 grain 接口的程序集显式添加到应用程序设置中。

完成这些步骤后,我们可以生成客户端及其 Connect() 方法以连接到群集。

可以创建一个面向 .NET Framework 4.6.1 或更高版本的空控制台应用程序项目来运行客户端,或者重新使用你创建的用于托管 silo 的控制台应用程序项目。

下面是客户端如何连接到本地 silo 的示例:

var client = new ClientBuilder()
    .UseLocalhostClustering()
    .Configure<ClusterOptions>(options =>
    {
        options.ClusterId = "dev";
        options.ServiceId = "MyAwesomeService";
    })
    .ConfigureLogging(logging => logging.AddConsole())
var client = builder.Build();

await client.Connect();