服务器上有3个筒仓,并具有无状态谷物
[StatelessWorker(1)] // max 1 activation per silo
public class MyLonelyWorkerGrain : ILonelyWorkerGrain
{
...
}
因此,每个筒仓创建1个(最大(谷物。有没有办法强制从特定的筒仓中取出粮食?
GrainFactory.GetGrain<ILonelyWorkerGrain>(0); //?????
来自奥尔良文档:
当将[StatelessWorker]属性应用于晶粒类时,它向Orleans运行时指示该类的晶粒应被视为无状态Worker晶粒。无状态Worker类具有以下属性,这些属性使得它们的执行与普通类的执行非常不同。
- Orleans运行时可以并且将在集群的不同竖井上创建无状态Worker谷物的多次激活
- 对Stateless Worker grain发出的请求始终在本地执行,也就是说,在发出请求的同一思洛存储器上,由思洛存储器中运行的grain发出或由思洛服务器的客户端网关接收因此,从其他晶粒或客户端网关对无状态Worker晶粒的调用永远不会产生远程消息
- 如果已经存在的无状态工作进程繁忙,则Orleans Runtime会自动创建无状态工作线程的额外激活。除非可选的maxLocalWorkers参数明确指定,否则运行时为每个思洛存储器创建的无状态工作线程的最大激活次数默认受计算机上CPU核数的限制
- 由于2和3的原因,无状态Worker谷物激活无法单独寻址。对无状态Worker谷物的两个后续请求可以通过对其进行不同的激活来处理