![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=1739656185-FDn1XFakp2xX3jXDrOmI5aWYQCBvAq6B-0-ff7d68e4ebd6a5593334165163fb8ae9)
Grain服务接口的实现逻辑通常被定义在Grain类型内,开发人员可以使用async/await关键字对服务流程中异步逻辑的实现进行简化。例如,以下代码在EchoTalkerGrain类型中实现了ITalker服务接口的处理逻辑:
![](https://epubservercos.yuewen.com/5DD5C6/23446275701391606/epubprivate/OEBPS/Images/18_03.jpg?sign=1739656185-Baf1hUO3FJubUyl6IO15I9Wn4IDuhcfU-0-9257f9316bd2ce3cbcd5ccc4adf752f9)
![](https://epubservercos.yuewen.com/5DD5C6/23446275701391606/epubprivate/OEBPS/Images/19_01.jpg?sign=1739656185-bfyMoOzidfcBkjjo8cDUt8p2Os2l15Sy-0-ecb3c839c3c7d35d71d28a7accd8c9a9)