Azure 服务结构:IReliableQueue
Azure service fabric : IReliableQueue
我正在为我们的新服务使用 azure service fabric。
对于面向客户端的网关,我有一个使用 Web API 端点获取请求的无状态服务,实际工作是使用可靠的无状态参与者完成的。
按照 Sean McKenna - MSFT in this 的建议,我将传入请求放入 ReliableQueue 并将结果存储在 ReliableDictionary 中。
我不明白如何实现它,我应该在哪里定义 ReliableQueue??很明显(?)在 Web API 控制器上会发生作业入队,但是我应该在哪里以及何时出队对象?没有事件触发告诉我添加了一个对象??
如您所见,我很乐意在这方面提供一些帮助
谢谢
如果我对你的问题的理解正确,那么你只是在寻找一种从无状态服务到 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() 示例,请参阅 here)。
当您使项目出列时,您可以使用 ActorProxy 与 actor 通信并要求它完成工作。
在你提到的问题中,我描述的是 WordCount sample 中显示的模式。
在那种情况下,应用程序由无状态网关服务和有状态处理服务组成。客户端输入被发送到无状态网关,然后中继到有状态服务,它最初被保存在 ReliableQueue
中。同时,在 RunAsync
方法中有一个无限循环 运行 将项目从队列中拉出并处理它们,结果存储在 ReliableDictionary
中。当您想要快速 ACK 回客户端您收到(并安全地保留!)它的输入并且能够负担得起异步执行实际处理时,此模式很有用。
请注意,如果您打算将状态存储在 ReliableQueue
/ReliableDictionary
中,那么使用无状态 actor 进行处理可能没有太大价值。您最好将该逻辑移动到有状态服务中的一种类型并在那里进行处理,因为您可能会为自己节省来回的网络跃点。
我正在为我们的新服务使用 azure service fabric。
对于面向客户端的网关,我有一个使用 Web API 端点获取请求的无状态服务,实际工作是使用可靠的无状态参与者完成的。
按照 Sean McKenna - MSFT in this
我不明白如何实现它,我应该在哪里定义 ReliableQueue??很明显(?)在 Web API 控制器上会发生作业入队,但是我应该在哪里以及何时出队对象?没有事件触发告诉我添加了一个对象??
如您所见,我很乐意在这方面提供一些帮助
谢谢
如果我对你的问题的理解正确,那么你只是在寻找一种从无状态服务到 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() 示例,请参阅 here)。
当您使项目出列时,您可以使用 ActorProxy 与 actor 通信并要求它完成工作。
在你提到的问题中,我描述的是 WordCount sample 中显示的模式。
在那种情况下,应用程序由无状态网关服务和有状态处理服务组成。客户端输入被发送到无状态网关,然后中继到有状态服务,它最初被保存在 ReliableQueue
中。同时,在 RunAsync
方法中有一个无限循环 运行 将项目从队列中拉出并处理它们,结果存储在 ReliableDictionary
中。当您想要快速 ACK 回客户端您收到(并安全地保留!)它的输入并且能够负担得起异步执行实际处理时,此模式很有用。
请注意,如果您打算将状态存储在 ReliableQueue
/ReliableDictionary
中,那么使用无状态 actor 进行处理可能没有太大价值。您最好将该逻辑移动到有状态服务中的一种类型并在那里进行处理,因为您可能会为自己节省来回的网络跃点。