![Orleans:构建高性能分布式Actor服务](https://wfqqreader-1252317822.image.myqcloud.com/cover/223/44175223/b_44175223.jpg)
上QQ阅读APP看书,第一时间看更新
2.2 Grain的服务模型
2.2.1 服务接口与实现
在Actor模型中,每个Actor实例通过服务接口对外发布功能,因此在Orleans内实现Grain服务时,开发人员应当首先定义每个Grain类型所提供的服务接口,以此作为服务调用过程中Grain实例与调用方间的服务契约(Service Contract)。
在Orleans内的所有Grain服务接口方法都为异步方法,这是由于Orleans运行时是通过异步消息传递的方式实现对Grain实例的服务调用的。因此,Grain服务接口中所有方式的返回值类型都应被声明为Task(对应同步场景下的无返回值函数)或Task<T> /ValueTask<T>(对应同步场景下返回值类型为T的函数)。以下代码为一个Grain服务接口的声明示例:
![](https://epubservercos.yuewen.com/5DD5C6/23446275701391606/epubprivate/OEBPS/Images/18_02.jpg?sign=1738844751-PkfuDGmfdY3CrxexBrzdVXSNqChNSUpi-0-356e869c392571e4929f0f35cc0d8693)
Grain服务接口的实现逻辑通常被定义在Grain类型内,开发人员可以使用async/await关键字对服务流程中异步逻辑的实现进行简化。例如,以下代码在EchoTalkerGrain类型中实现了ITalker服务接口的处理逻辑:
![](https://epubservercos.yuewen.com/5DD5C6/23446275701391606/epubprivate/OEBPS/Images/18_03.jpg?sign=1738844751-fi4Dr902eMJA9WqYowEkImBA8TzejyV7-0-bfb01b4114a38fb16826653178cc0a0c)
![](https://epubservercos.yuewen.com/5DD5C6/23446275701391606/epubprivate/OEBPS/Images/19_01.jpg?sign=1738844751-HJt4tGHg1vHXLuqVu6LZkp0gnRqmpka1-0-c017e10a814727843684f7ce0c6f6ba8)