Reliable Actors 入门

本文演示在 Visual Studio 中创建和调试简单的 Reliable Actor 应用程序。 有关 Reliable Actors 的详细信息,请参阅 Service Fabric Reliable Actors 简介

先决条件

在开始之前,确保计算机上已设置 Service Fabric 开发环境(包括 Visual Studio)。 有关详细信息,请参阅如何设置开发环境

在 Visual Studio 中创建新项目

以管理员身份启动 Visual Studio 2019 或更高版本,然后新建一个“Service Fabric 应用程序” 项目:

Service Fabric tools for Visual Studio - new project

在下一对话框中,选择 .NET Core 2.0 下的“执行组件服务” ,并输入服务的名称。

Service Fabric project templates

创建的项目显示以下结构:

Service Fabric project structure

检查解决方案

该解决方案包含三个项目:

  • 应用程序项目 (MyApplication) 。 此项目将所有服务打包在一起以进行部署。 它包含用于管理应用程序的 ApplicationManifest.xml 和 PowerShell 脚本。

  • 接口项目 (HelloWorld.Interfaces) 。 此项目包含执行组件的接口定义。 可以在任何项目中使用任何名称来定义执行组件接口。 接口将定义由执行组件实现和调用执行组件的客户端这两者所共享的执行组件协定。 由于客户端项目可能依赖于接口,因此通常在独立于执行组件实现的程序集中定义它。

  • 执行组件服务项目 (HelloWorld) 。 此项目定义要托管执行组件的 Service Fabric 服务。 它包含执行组件的实现 HelloWorld.cs 。 执行组件实现是派生自基类型 Actor 的一个类,用于实现 MyActor.Interfaces 项目中定义的接口。 执行组件类还必须实现一个接受 ActorService 实例和 ActorId 并将其传递给基本 Actor 类的构造函数。

    此项目还包含 Program.cs ,它使用 ActorRuntime.RegisterActorAsync<T>() 向 Service Fabric 运行时注册执行组件类。 HelloWorld 类已注册。 还必须使用 Main() 方法来注册添加到项目中的任何其他执行组件实现。

自定义 HelloWorld 执行组件

项目模板定义 IHelloWorld 接口中的某些方法,并在 HelloWorld 执行组件实现中实现这些方法。 替换这些方法,以便执行组件服务返回简单的“Hello World”字符串。

在 HelloWorld.Interfaces 项目中的 IHelloWorld.cs 文件上,替换接口定义,如下所示:

public interface IHelloWorld : IActor
{
    Task<string> GetHelloWorldAsync();
}

在 HelloWorld 项目中的 HelloWorld.cs 上,替换整个类定义,如下所示:

[StatePersistence(StatePersistence.Persisted)]
internal class HelloWorld : Actor, IHelloWorld
{
    public HelloWorld(ActorService actorService, ActorId actorId)
        : base(actorService, actorId)
    {
    }

    public Task<string> GetHelloWorldAsync()
    {
        return Task.FromResult("Hello from my reliable actor!");
    }
}

按 Ctrl-Shift-B 以生成项目并确保编译所有内容。

添加客户端

创建一个简单的控制台应用程序,以调用执行组件服务。

  1. 右键单击“解决方案资源管理器”中的解决方案,并单击“添加”>“新建项目...”。

  2. 在“.NET Core” 项目类型下,选择“控制台应用(.NET Core)” 。 将项目命名为 ActorClient 。

    Add New Project dialog

    注意

    控制台应用程序不是通常在 Service Fabric 中用作客户端的那种应用,但它非常便于使用本地 Service Fabric 群集进行调试和测试。

  3. 控制台应用程序必须为 64 位的应用程序,以保持与接口项目和其他依赖项的兼容性。 在“解决方案资源管理器”中,右键单击“ActorClient” 项目,并单击“属性” 。 在“生成” 选项卡上,将“平台目标” 设置为“x64” 。

    Build properties

  4. 客户端项目需要 Reliable Actors NuGet 包。 单击“工具” >“NuGet 包管理器” >“包管理器控制台” 。 在“包管理器控制台”中,输入以下命令:

    Install-Package Microsoft.ServiceFabric.Actors -IncludePrerelease -ProjectName ActorClient
    

    NuGet 包及其所有依赖项都安装在 ActorClient 项目中。

  5. 客户端项目还需要对接口项目的引用。 在 ActorClient 项目中,右键单击“依赖项”,然后单击“添加项目引用...” 。选择“项目”>“解决方案”(如果尚未选择),然后勾选“HelloWorld.Interfaces”旁边的复选框。 单击“确定”。

    Add reference dialog

  6. 在 ActorClient 项目中,将 Program.cs 的整个内容替换为以下代码:

    using System;
    using System.Threading.Tasks;
    using Microsoft.ServiceFabric.Actors;
    using Microsoft.ServiceFabric.Actors.Client;
    using HelloWorld.Interfaces;
    
    namespace ActorClient
    {
        class Program
        {
            static void Main(string[] args)
            {
                IHelloWorld actor = ActorProxy.Create<IHelloWorld>(ActorId.CreateRandom(), new Uri("fabric:/MyApplication/HelloWorldActorService"));
                Task<string> retval = actor.GetHelloWorldAsync();
                Console.Write(retval.Result);
                Console.ReadLine();
            }
        }
    }
    

运行和调试

按 F5 在 Service Fabric 开发群集中本地生成、部署和运行应用程序。 在部署过程中,可以在“输出”窗口中查看进度。

Service Fabric debugging output window

当输出包含文本“应用程序已准备就绪” 时,可使用 ActorClient 应用程序来测试服务。 在“解决方案资源管理器”中,右键单击“ActorClient” 项目,然后单击“调试” >“启动新实例” 。 命令行应用程序应显示执行组件服务中的输出。

Application output

提示

Service Fabric 执行组件运行时发出一些与执行组件方法相关的事件和性能计数器。 它们可用于进行诊断和性能监视。

后续步骤

了解有关 Reliable Actors 如何使用 Service Fabric 平台的详细信息。