Получить доступ к ActorService, чтобы получить список всех актеров - PullRequest
0 голосов
/ 20 июня 2019

Попытка изучить основы 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, чтобы иметь возможность видеть, какие есть актеры.

1 Ответ

0 голосов
/ 21 июня 2019

Вы можете использовать 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);

Обязательно повторите вызов для каждого раздела службы Actor, передав соответствующие им partitionKey.

Подробнее здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...