繁体   English   中英

Azure服务结构:IReliableQueue

[英]Azure service fabric : IReliableQueue

我正在使用天蓝色服务面料进行新服务。

对于面向客户端的网关,我有一个使用Web API端点的无状态服务获取请求,实际工作是使用可靠的无状态actor完成的。

正如Sean McKenna - MSFT在这个问题中所建议的,我将传入的请求放在ReliableQueue中并将结果存储在ReliableDictionary中。

我不明白如何实现这个,我在哪里定义ReliableQueue? 很明显(?)将一个作业排入Web API控制器,但是我在哪里出列一个对象以及什么时候出现? 没有事件触发告诉我添加了一个对象?

如你所见,我会在这方面得到一些帮助

谢谢

在您提到的问题中,我正在描述WordCount示例中显示的模式。

在这种情况下,应用程序由无状态网关服务和有状态处理服务组成。 客户端输入被发送到无状态网关,然后中继到有状态服务,在那里它最初保存在ReliableQueue 同时,在RunAsync方法中运行一个无限的while循环,将项目从队列中拉出并处理它们,结果存储在ReliableDictionary 当您希望快速确认回到您收到(并安全地保持!)其输入的客户端并且能够以异步方式执行实际处理时,此模式非常有用。

请注意,如果您打算将状态存储在ReliableQueue / ReliableDictionary ,那么使用无状态actor进行处理可能没什么价值。 您最好将该逻辑移动到有状态服务中的类型中并在那里进行处理,因为您可能会来回保存自己的网络跳跃。

如果我正确理解您的问题,您只是在寻找从无状态服务到演员的通信方式。 如果是这样,您不需要可靠的队列 - 只需使用ActorProxy实例进行调用:

ActorId actorId = new ActorId("YourActorId");
string applicationName = "fabric:/YourAppName";
IYourActor actor = ActorProxy.Create<IYourActor>(actorId, applicationName);
await dtoActor.DoWork(new WorkItem());

Service Fabric将为您路由此呼叫。

您可以拥有一个有状态服务,该服务将使RunAsync方法中的队列中的项目出列(有关RunAsync()示例,请参见此处 )。

当您将某个项目出列时,您可以使用ActorProxy与actor进行通信,并要求它执行该项工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM