奥尔良无国籍工人

Orleans StatelessWorkers

我发现很难找到任何关于使用 StatelessWorkers 的详细文档。

我想实现类似于 this 的目标。正如文档中所建议的那样,我需要使用无状态工作者来处理一些消息并激活最终将保持状态的谷物。

我希望有多个调度程序 grain 实例处理 "initialization",因为该 grain 决不会处理任何状态,并且消息不需要按顺序排队。

我需要将这个grain标记为Reentrant吗?或者 StatelessWorker(属性)就足够了吗?

关于激活,看来我需要继承自IGrainWithIntegerKey(或类似的接口)。这意味着我需要按如下方式激活颗粒:

GrainClient.GrainFactory.GetGrain<IDispatcherActor>(0)

因为我总是使用 0 作为 ID,是否还会激活多个 grain 实例?还是我需要创建不同的 ID。好像不能这样称呼谷物:

GrainClient.GrainFactory.GetGrain<IDispatcherActor>()

即使我继承自IGrain

简答

您可以通过继承 IGrainWithIntegerKey 并使用密钥 0 创建无状态工作者。

长答案

无国籍工人与普通谷物相同,但有几点不同:

  1. 它们总是在本地激活(与调用者在同一个筒仓中)。
  2. 如果对无状态工作者激活的调用累积,则可以创建多个激活。

它们遵循相同的停用语义。

无国籍工人拥有钥匙可能令人惊讶,但钥匙可能有用的原因有以下几个:

  1. 无状态工作者激活可能有不同的'flavours',这可能与其密钥有关。
  2. 可以通过使用一系列密钥寻址来激活更多的无国籍工人。

但如果这些功能对您没有用,惯例是使用 0 的密钥。

  1. They can only be called from inside a silo.

StatelessWorker grains可以从客户端调用。这实际上是一种流行的场景,客户端的调用应该在被路由到其他谷物进行实际处理之前进行预处理。