在上一章中,我们了解了Orleans的核心概念和价值。现在,让我们动手实践,一步步搭建开发环境,创建并运行一个简单的Orleans"Hello World"应用程序,获得第一手体验。
1. 环境准备与项目规划
在开始编码之前,我们需要确保开发环境就绪。你需要安装以下工具:
- .NET 8.0 SDK 或更高版本(Orleans 7.x支持.NET 6.0及以上)
- Visual Studio 2022、Visual Studio Code或任何你喜欢的C#开发环境
我们的第一个Orleans应用程序将包含以下项目组件:
| 项目类型 | 项目名称 | 职责说明 |
|---|---|---|
| 类库 | HelloWorld.Interfaces | 定义Grain接口(契约) |
| 类库 | HelloWorld.Grains | 实现Grain接口的业务逻辑 |
| 控制台应用 | HelloWorld.Silo | 托管Orleans服务端(Silo) |
| 控制台应用 | HelloWorld.Client | 客户端应用,调用Grain |
这样的分离设计符合关注点分离原则(Separation of Concerns,简称SoC),让接口与实现解耦,便于后续扩展和维护。
2.创建项目与配置依赖
首先,我们创建一个新的解决方案并添加所需的项目。你可以使用IDE的图形界面,或者使用.NET CLI命令行工具:
# 创建解决方案文件dotnet new sln -n HelloWorld.Orleans# 创建各个项目dotnet new classlib -n HelloWorld.Interfaces dotnet new classlib -n HelloWorld.Grains dotnet new console -n HelloWorld.Silo dotnet new console -n HelloWorld.Client# 将项目添加到解决方案dotnet slnaddHelloWorld.Interfaces/HelloWorld.Interfaces.csproj dotnet slnaddHelloWorld.Grains/HelloWorld.Grains.csproj dotnet slnaddHelloWorld.Silo/HelloWorld.Silo.csproj dotnet slnaddHelloWorld.Client/HelloWorld.Client.csproj接下来,为每个项目添加必要的NuGet包和项目引用
# Interfaces项目只需要Orleans核心抽象cdHelloWorld.Interfaces dotnetaddpackage Microsoft.Orleans.Core.Abstractions# Grains项目需要引用Interfaces,并添加代码生成支持cd../HelloWorld.Grains dotnetaddreference../HelloWorld.Interfaces/HelloWorld.Interfaces.csproj dotnetaddpackage Microsoft.Orleans.Sdk# Silo项目需要引用Grains和Interfaces,并添加服务端包cd../HelloWorld.Silo dotnetaddreference../HelloWorld.Interfaces/HelloWorld.Interfaces.csproj dotnetaddreference../HelloWorld.Grains/HelloWorld.Grains.csproj dotnetaddpackage Microsoft.Orleans.Server# Client项目需要引用Interfaces,并添加客户端包cd../HelloWorld.Client dotnetaddreference../HelloWorld.Interfaces/HelloWorld.Interfaces.csproj dotnetaddpackage Microsoft.Orleans.Client3. 定义Grain接口
在HelloWorld.Interfaces项目中,我们定义Grain接口。Grain接口是客户端与Grain之间的契约,定义了可调用的方法。
// HelloWorld.Interfaces/IHelloGrain.csusingOrleans;namespaceHelloWorld.Interfaces{publicinterfaceIHelloGrain:IGrainWithStringKey{Task<string>SayHello(stringgreeting