【问题标题】:How can I get the Stateless Grain from Specific Silo (Orleans 2.0)如何从特定筒仓(奥尔良 2.0)中获取无状态谷物
【发布时间】:2020-11-10 17:21:27
【问题描述】:

在服务器上有 3 个 silo 并且有 Stateless grain

[StatelessWorker(1)] // max 1 activation per silo
public class MyLonelyWorkerGrain : ILonelyWorkerGrain
{
 ...
}

因此,每个筒仓创建 1(最大)个谷物。有什么办法可以强制从特定的筒仓中获取粮食吗?

GrainFactory.GetGrain<ILonelyWorkerGrain>(0); //?????

【问题讨论】:

    标签: c# orleans


    【解决方案1】:

    来自Orleans documentation

    当 [StatelessWorker] 属性应用于grain 类时,它向Orleans 运行时指示该类的grain 应被视为无状态工作者grain。 Stateless Worker grain 具有以下属性,使其执行与普通grain 类的执行非常不同。

    1. Orleans 运行时可以并且将在集群的不同孤岛上创建多个无状态 Worker 颗粒的激活。
    2. 对 Stateless Worker grains 发出的请求总是在本地执行,即在请求发起的同一个筒仓上,要么由筒仓上运行的grain发出或收到通过筒仓的客户端网关。 因此,从其他 grain 或客户端网关调用 Stateless Worker grain 永远不会产生远程消息
    3. Orleans 运行时会在现有的无状态 Worker grain 忙碌时自动创建额外的激活。除非由可选的 maxLocalWorkers 参数明确指定,否则运行时为每个筒仓创建的无状态 Worker 粒度的最大激活次数默认受机器上 CPU 内核数的限制。
    4. 由于 2 和 3,Stateless Worker 粒度激活不能单独寻址。对 Stateless Worker grain 的两个后续请求可能由它的不同激活来处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-04
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 2019-01-05
      相关资源
      最近更新 更多