2016-10-03 2 views
2

Мне сложно найти подробную документацию по использованию StatelessWorkers.Orleans StatelessWorkers

Я хочу достичь чего-то подобного this. Как было предложено в документе, мне нужно использовать Работников без гражданства, чтобы обрабатывать некоторые сообщения и активировать зерна, которые в конечном итоге будут удерживать состояние.

Я хотел бы иметь несколько экземпляров обработки зернистости диспетчера «инициализация», поскольку это зерно отнюдь не обрабатывает любое состояние, и сообщения не обязательно должны быть поставлены в очередь.

Нужно ли отмечать это зерно как реентера? или Будет ли достаточно StatelessWorker (атрибут)?

Что касается активации, кажется, мне нужно наследовать от IGrainWithIntegerKey (или аналогичный интерфейс). это означает, что мне нужно активировать зерно следующим образом:

GrainClient.GrainFactory.GetGrain<IDispatcherActor>(0) 

Поскольку я всегда использовать 0 как идентификатор будет несколько экземпляров зерна еще активироваться? или мне нужно создать разные идентификаторы. Похоже, я не могу назвать зерно следующим образом:

GrainClient.GrainFactory.GetGrain<IDispatcherActor>() 

даже если я наследовать от IGrain

ответ

7

короткого ответа

Вы можете создать без гражданства работника путем наследования IGrainWithIntegerKey и с помощью ключа 0.

длинный ответ

Апатриды рабочие являются такими же, как обычные зерна с парой отличий:

  1. Они всегда активируются локально (в том же бункере, что и вызывающий).
  2. Многократные активации могут быть созданы, если вызовы активации активации без гражданства накапливаются.

Они подвержены той же семантике дезактивации.

Это может быть удивительно, что лица без работников имеют ключи, но есть несколько причин, почему ключи могут быть полезны:

  1. Апатриды рабочих активаций могут иметь различные «ароматы», которые могут быть связаны с их ключом.
  2. Более широкий пул работников без гражданства может быть активирован путем обращения к ним с помощью ряда ключей.

Но если эти функции вам не подходят, соглашение заключается в использовании ключа 0.

+0

Спасибо за ваш ответ, Ричард. «Их можно вызывать только из бункера». Значит ли это, что я не могу активировать безгражданца, использующего GrainClient? и имеет ли смысл сделать его реентерабельным? так что одно зерно может обрабатывать несколько запросов? – Jonny

+0

Работников без гражданства можно вызывать из других зерен, но не напрямую от внешних клиентов. Я бы сделал реентератор для оптимизации производительности. Я не думаю, что нужно делать это с людьми без гражданства. –

3
  1. Их можно вызывать только из бункера.

StatelessWorker зерно может быть вызвано из клиентов.Это на самом деле один из популярных сценариев, когда вызовы от клиентов должны быть предварительно обработаны, прежде чем их можно будет перенаправить в другие зерна для реальной обработки.

+0

Другими популярными сценариями являются выполнение чистых функциональных/безстоящих операций и автоматическое масштабирование элементов горячего кеша. – sbykov

Смежные вопросы