一个简单的Orleans例子

Orleans例子的大致结构

在这里插入图片描述

  1. Grain接口
  2. Grain接口的实现
  3. Orleans的Server
  4. Orleans的Client

各个项目间的关系:
【Grain接口的实现】引用【Grain接口】,并实现Grain接口
【Client】引用【Grain接口】,
【Server】引用【Grain接口的实现】
需要注意的是:
【Grain的接口】和【Grain接口的实现】需要引用【Microsoft.Orleans.OrleansCodeGenerator.Build】包。引入这个包,会在【Grain的接口】和【Grain接口的实现】中生成通讯用的cs文件的。如果不引用这个包,编译的时候是不会报错的,但是运行的时候会提示
“System.ArgumentException:“Cannot find an implementation class for grain interface: OrleansInterface.ITest. Make sure the grain assembly was correctly deployed and loaded in the silo.”
生成通讯文件时在编译的时候。

【Client】和【Server】分别需要引用Orleans对应的包,这个包不引用代码直接编译不了就不说了。

Grain接口

定义一个接口文件,继承IGrainWithXXXX即可,XXXX可以是GuidKey,也可以是StringKey,如下图。这些类型在GetGrain时,用来判断标识的类型。
在这里插入图片描述
例子的实现:

 public interface ITest : IGrainWithGuidKey 
 {
      Task<string> GetName(int id); 
 }

Grain接口的实现

定义一个类,继承自Grain和ITest接口,代码如下:

public class TestGrain : Grain,ITest
    {
         public Task<string> GetName(int id)
        {
            List<string> name = new List<string>()//具体业务
            {
                "张三","李四","王五"
            };
            if (id >= 0 && id < name.Count)
            {
                return Task.FromResult(name[id]);
            }
            return Task.FromResult("NO");
        }
    }

Orleans的服务端

服务端需要创建一个ISiloHost的实例,然后调用该类的StartAsync开始监听即可。

static void Run()
        {
            ISiloHost host = new SiloHostBuilder()
                .UseLocalhostClustering(40001,40000)
                .Build();
            host.StartAsync();
        }

Orleans的客户端

客户端创建的是IClusterClient的实例,然后将client连接到silo,然后通过该client获取Grain,接着调用Grain的方法即可。代码如下:

static async void Run()
        {
        IClusterClient client = new ClientBuilder()
                .UseLocalhostClustering()
                .UseStaticClustering(new IPEndPoint(IPAddress.Parse("127.0.0.1"),40000))
                .Configure<ClusterOptions>(opt =>
                {
                    opt.ClusterId = "TestCluster";
                    opt.ServiceId = "TestServer";
                })
                .Build();
        await client.Connect(ex =>
            {
                if (ex != null)
                {
                    Console.WriteLine(ex.Message);
                }
                return Task.FromResult(true);
            });
            ITest test = client.GetGrain<ITest>(Guid.NewGuid());
             string name = await test.GetName(0);
            Console.WriteLine("name:" + name);
            string name1 = await test.GetName(1);
            Console.WriteLine("name1:" + name1);
            string name2 = await test.GetName(2);
            Console.WriteLine("name2:" + name2);
        }

运行结果

先运行server:
在这里插入图片描述
然后运行Client,可以看到已经成功调用了Server的方法:
在这里插入图片描述
调用的同时,server也会输出如下日志:
在这里插入图片描述
Orleans的简单例子就到这里结束了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Orleans 项目基本上被认为是并行计算模型 Actor Model 的分布式版本。  虽然已经存在 Erlang 和 Akka 这样利用 Actor Model 的框架,用户仍然需要做很多工作来确保那些 actors 保持在线以及能够处理故障和恢复。Orleans 框架着眼复杂项目和 actor 管理,让用户能够编写分布式项目而无需担心。    关于自家的云计算平台,微软最大的一个卖点就是开发人员可以使用.NET、Visual Studio和其它编程工具来编写Azure应用程序。不过这并不是事情的全部,微软研究人员正在研发下一代云计算编程模式和相关工具,根据最新的资 料,Orleans就微软下一代云计算编程模式(之一)。    Orleans是一种新的编程模式,用来提升微软通用语言运行库(CLR)的抽象水平,它引入了“grains”的概念,这是一个可以在数据中心之 间迁移的计算和数据存储单元。Orleans自身还将提供很多运行时,包括Geo-Distribution、数据复制与一致行、性能监控、自适应控制、 运行时监控、分布式调试。    Orleans的宗旨就是为了创建一种既适用于客户端又适用于服务器的编程模式,简化代码调试,提高代码的可移植性。    目前已知的资料并没有任何关于Orleans开发计划的内容,Orleans也许还处在概念设计阶段,也许已经开始了初期的开发工作,这些都要耐心等待才会有答案。相关入门教程: http://www.rm5u.com/orleans/orleans-intro.html 标签:云计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值