Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Azure服务结构:IReliableQueue_Asp.net_.net_Azure Service Fabric - Fatal编程技术网

Asp.net Azure服务结构:IReliableQueue

Asp.net Azure服务结构:IReliableQueue,asp.net,.net,azure-service-fabric,Asp.net,.net,Azure Service Fabric,我正在为我们的新服务使用azure service fabric 对于面向客户端的网关,我有一个使用WebAPI端点获取请求的无状态服务,实际工作是使用可靠的无状态参与者完成的 正如本文中所建议的,我将传入的请求放在一个ReliableQueue中,并将结果存储在ReliableDictionary中 我不明白如何实现这一点,我在哪里定义ReliableQueue??很明显(?)将在Web API控制器上对作业进行排队,但我在何处以及何时对对象进行排队?没有事件触发告诉我添加了对象 如你所见,我

我正在为我们的新服务使用azure service fabric

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

正如本文中所建议的,我将传入的请求放在一个ReliableQueue中,并将结果存储在ReliableDictionary中

我不明白如何实现这一点,我在哪里定义ReliableQueue??很明显(?)将在Web API控制器上对作业进行排队,但我在何处以及何时对对象进行排队?没有事件触发告诉我添加了对象

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


谢谢

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

ActorId actorId = new ActorId("YourActorId");
string applicationName = "fabric:/YourAppName";
IYourActor actor = ActorProxy.Create<IYourActor>(actorId, applicationName);
await dtoActor.DoWork(new WorkItem());
ActorId-ActorId=new-ActorId(“YourActorId”);
字符串applicationName=“fabric:/YourAppName”;
IYourActor=ActorProxy.Create(actorId,applicationName);
等待dtoActor.DoWork(newworkItem());

服务结构将为您路由此调用。

您可以拥有一个有状态服务,该服务将在RunAsync方法中将项目从队列中移出(请参阅以获取RunAsync()示例)


当您将某个项目出列时,您可以使用ActorProxy与参与者进行通信,并要求其完成工作

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

在这种情况下,应用程序由无状态网关服务和有状态处理服务组成。客户端输入被发送到无状态网关,然后中继到有状态服务,在那里它最初被保存在
ReliableQueue
中。同时,在
RunAsync
方法中运行着一个无限while循环,从队列中提取项目并对其进行处理,结果存储在
ReliableDictionary
中。当您想要快速地将接收到(并安全地持久化!)的输入反馈给客户机,并且能够异步执行真正的处理时,此模式非常有用


请注意,如果要将状态存储在
ReliableQueue
/
ReliableDictionary
中,那么使用无状态参与者进行处理可能没有多大价值。您最好将该逻辑移到有状态服务中的一种类型中,并在那里进行处理,因为这样可能会节省来回的网络跳数。

我的参与者正在做长期工作,他们需要从各种来源获取信息,并从客户端网站上进行一些web清理。你还认为把这一切都放在有状态的服务中可能更明智吗?是的。没有理由不能在有状态服务中的线程中执行长时间运行的工作。此外,当您需要您的参与者执行一系列听起来像您这样的外部交互时,参与者模型的单线程特性可能会有一些缺陷。一般来说,如果你限制演员需要叫喊的数量,演员的工作效果最好。我们正在编写一些文档,以使此指南更清晰。@SeanMcKenna MSFT链接已断开。你能把它更新到正确的url吗?@RomanGanz:看看这里:-我们用一个新的样本更新了repo,但是WordCount样本在同一个repo中,但是应用程序在“classic”分支中: