首页 > 解决方案 > 访问 ActorService 以获取所有演员的列表

问题描述

尝试学习 Azure Service Fabric 的基础知识。我有一个应用程序在我创建了一个 UserActorService 的地方工作,我可以创建和检索演员以及在其中保存状态。但我不知道如何获得所有演员的名单。

我对这段代码有一些了解:

     public async Task<List<string>> GetAllUserActors()
    {
        var fabricClient = new FabricClient();
        var cancellationTokenSource = new CancellationTokenSource();
        ContinuationToken continuationToken = null;
        var result = new List<string>();

        do
        {
            var page = await actorService.GetActorsAsync(continuationToken, cancellationTokenSource.Token);
            result.AddRange(page.Items.Select(i => i.ActorId.ToString()).ToList());
            continuationToken = page.ContinuationToken;

        } while (continuationToken != null);

        return result;
    }

问题是我不知道我应该把它放在哪里。代码需要访问实际的 userActor 服务 ActorService。而在 UserActorService 中,我只能在 UserActor 中获得它。我想我可以把 UserActor 放在里面,然后调用一个单独的 UserActor 来让这个方法返回一个列表。

但这不应该是这样,因为我认为我不应该需要知道一个 UserActor 的 id 才能看到有哪些演员。

标签: azure-service-fabric

解决方案


您可以使用 SF Remoting - 从集群中的任何应用程序 - 获取数据:

IActorService actorServiceProxy = ActorServiceProxy.Create(
    new Uri("fabric:/MyApp/MyService"), partitionKey);    
ContinuationToken continuationToken = null;
List<ActorInformation> activeActors = new List<ActorInformation>();

do
{
    PagedResult<ActorInformation> page = await actorServiceProxy.GetActorsAsync(continuationToken, cancellationToken);    
    activeActors.AddRange(page.Items.Where(x => x.IsActive));    
    continuationToken = page.ContinuationToken;
}
while (continuationToken != null);

确保通过传递它们各自的partitionKey.

更多信息在这里


推荐阅读