- Orleans:构建高性能分布式Actor服务
- 吴哲昊编著
- 310字
- 2022-06-17 16:15:46
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=1739474024-akGOdZph9Da95MkcahFFfgdUK0S3lbGQ-0-42751599cae82f3506d29ca562ef720d)
Grain服务接口的实现逻辑通常被定义在Grain类型内,开发人员可以使用async/await关键字对服务流程中异步逻辑的实现进行简化。例如,以下代码在EchoTalkerGrain类型中实现了ITalker服务接口的处理逻辑:
![](https://epubservercos.yuewen.com/5DD5C6/23446275701391606/epubprivate/OEBPS/Images/18_03.jpg?sign=1739474024-gdU7RYefd2GGqd9cyQsmmelLlJOObKLg-0-4214a2c73a3a976767b321e14eac42d8)
![](https://epubservercos.yuewen.com/5DD5C6/23446275701391606/epubprivate/OEBPS/Images/19_01.jpg?sign=1739474024-ob5PWEmMECpEs6p5m11RudmNUZ5cogc7-0-4b1ba3678cdc25eac9944f53831f41d1)