奥尔良无国籍工人

Jon*_*nny 3 .net c# concurrency actor orleans

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

我想实现与此类似的东西.正如文件中所建议的那样,我需要使用无状态工作者来处理一些消息并激活最终将持有该状态的谷物.

我希望有一个调度程序粒度的多个实例处理"初始化",因为这个粒子决不会处理任何状态,并且消息不需要按顺序排队.

我是否需要将此颗粒标记为可重入?或StatelessWorker(属性)是否足够?

关于激活,似乎我需要继承IGrainWithIntegerKey(或类似的接口).这意味着我需要按如下方式激活谷物:

GrainClient.GrainFactory.GetGrain<IDispatcherActor>(0)
Run Code Online (Sandbox Code Playgroud)

由于我总是使用0作为ID,谷物的多个实例仍然会被激活?或者我是否需要创建不同的ID.好像我不能称之为如下:

GrainClient.GrainFactory.GetGrain<IDispatcherActor>()
Run Code Online (Sandbox Code Playgroud)

即使我继承了 IGrain

Ric*_*ury 7

简答

您可以通过继承IGrainWithIntegerKey和使用密钥来创建无状态工作程序0.

答案很长

无国籍工人与普通农民一样,但存在一些差异:

  1. 它们总是在本地激活(与呼叫者在同一个孤岛中).
  2. 如果对无状态工作程序激活的调用建立,则可以创建多个激活.

它们受制于相同的停用语义.

无国籍工人有钥匙可能会令人惊讶,但有几个原因可能是钥匙有用:

  1. 无国籍工人激活可能有不同的"口味",这可能与他们的关键有关.
  2. 可以通过使用一系列密钥对其进行处理来激活更大的无状态工作者池.

但是如果这些功能对你没用,那么惯例是使用一个键0.