Orleans项目地址
基本概念
Actor模式
Grain <-> (Virtual) Actor
Virtual表现在,调用方无需知道Grain的存活情况,可以假设Grain一直存活。
Orleans项目整体组成大致分为 Client 和 Server两部分, 两个模块之间使用GrainInterface作为约束, Grain寄宿在Silo中, Grain包含了实际执行的代码实现。
1 2 3 4 5 6 7 8 9 10 11 12 13
| public interface IGrainInterface: IGrainWithIntegerKey { Task<string> Method1(string str); }
public class GrainImp : IGrainInterface { public async Task<string> Method1(string str) { return await Task.FromResult($"Hello {str}") } }
|
持久化(状态)
Orleans为持久化提供了较为方便的接口, 由于Actor模式的原因, 在GrainImpl中使用状态的存取时, 也不用担心并发等问题。
在GrainImpl上添加继承Grain类, 其中TState是该Grain所需要持久化的状态。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class Person { public string Name {get;set;} }
public interface IPersonGrain: IGrainWithIntegerKey { Task<string> HelloAsync(string name); }
public class PersonGrain: Grain<IList<Person>, IGrainInterface { public async Task<string> HelloAsync(string name) { await ReadStateAsync(); State.Add(new Person(){Name=name}); await WriteStateAsync(); return await Task.FromResult($"Hello {name}")
} }
|