Orleans 2.0 官方文档 —— 2.3 入门教程与示例 -> Hello World示例概述

概述:Hello World

此概述与此处提供的Hello World示例应用程序相关联。

Orleans的主要概念涉及silo、client、一个或多个grain。创建Orleans应用程序涉及配置silo、配置client和编写grain。

配置Silo

通过SiloHostBuilder和一些补充选项类,以编程方式配置Silo。可以在此处找到所有选项的列表

[...]
        private static async Task<ISiloHost> StartSilo()
        {
            // define the cluster configuration
            var builder = new SiloHostBuilder()
                .UseLocalhostClustering()
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "dev";
                    options.ServiceId = "HelloWorldApp";
                })
                .Configure<EndpointOptions>(options => options.AdvertisedIPAddress = IPAddress.Loopback)
                .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(HelloGrain).Assembly).WithReferences())
                .ConfigureLogging(logging => logging.AddConsole());

            var host = builder.Build();
            await host.StartAsync();
            return host;
        }
选项用于
.UseLocalhostClustering()将client配置为连接到localhost上的silo。
ClusterOptionsClusterId是Orleans集群的名称,对于silo和client必须相同,因此它们可以相互通信。ServiceId是用于应用程序的ID,不得在部署之间进行更改
EndpointOptions这告诉silo在哪里监听。对于这个例子,我们使用的是loopback
ConfigureApplicationParts将grain类和接口程序集作为应用程序部件添加到您的orleans应用程序中。

加载配置后,构建SiloHost,然后异步启动。

配置Client

与Silo类似,客户端通过ClientBuilder类似的选项类集合进行配置。

        private static async Task<IClusterClient> StartClientWithRetries()
        {
            attempt = 0;
            IClusterClient client;
            client = new ClientBuilder()
                .UseLocalhostClustering()
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "dev";
                    options.ServiceId = "HelloWorldApp";
                })
                .ConfigureLogging(logging => logging.AddConsole())
                .Build();

            await client.Connect(RetryFilter);
            Console.WriteLine("Client successfully connect to silo host");
            return client;
        }
选项用于
.UseLocalhostClustering()与SiloHost相同
ClusterOptions与SiloHost相同

可以在“配置指南”的“客户端配置”部分中,找到有关配置客户端的更深入的指南。

写一个grain

grain是Orleans编程模型的关键原语。grain是Orleans应用程序的构建块,它们是隔离的、分布式的、持久性的原子单元。grain是表示应用程序实体的对象。就像在经典的面向对象编程中一样,grain封装了实体的状态,并在代码逻辑中对其行为进行编码。Grains可以通过调用彼此通过接口公开的方法,来保持彼此的引用并进行交互。

您可以在Orleans文档Core Concepts部分中阅读有关它们的更多信息

这是Hello World grain的主要代码:

[...]
namespace HelloWorld.Grains
{
    public class HelloGrain : Orleans.Grain, IHello
    {
        Task<string> IHello.SayHello(string greeting)
        {
            logger.LogInformation($"SayHello message received: greeting = '{greeting}'");
            return Task.FromResult($"You said: '{greeting}', I say: Hello!");
        }
    }
}

grain类实现了一个或多个grain接口,您可以这里的阅读Grains章节。

[...]
namespace HelloWorld.Interfaces
{
    public interface IHello : Orleans.IGrainWithIntegerKey
    {
        Task<string> SayHello(string greeting);
    }
}

各部分如何协同工作

该编程模型是我们分布式面向对象编程的核心概念的一部分。SiloHost首先启动。然后,OrleansClient程序启动。OrleansClient的Main方法调用启动客户端的方法StartClientWithRetries(),客户端被传递给DoClientWork()方法。


        private static async Task DoClientWork(IClusterClient client)
        {
            // example of calling grains from the initialized client
            var friend = client.GetGrain<IHello>(0);
            var response = await friend.SayHello("Good morning, my friend!");
            Console.WriteLine("\n\n{0}\n\n", response);
        }

此时,OrleansClient创建对IHello grain的引用,并通过其接口IHello,调用其SayHello()方法。此调用激活silo中的grain。OrleansClient向激活的grain发送问候语。grain返回问候语作为对OrleansClient的响应,OrleansClient显示在控制台上。

运行示例应用程序

要运行示例应用程序,请参阅自述文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值