2016-01-12 2 views
3

Я использую лазурную ткань для нашего нового сервиса.Azure service fabric: IReliableQueue

Для шлюза, обращенного к клиенту У меня есть запрос на получение статуса без состояния с использованием конечной точки веб-API, фактическая работа выполняется с использованием надежных игроков без гражданства.

Как было предложено Sean McKenna - MSFT в этом question, я поместил входящий запрос в ReliableQueue и сохранил результат в ReliableDictionary.

Я не понимаю, как реализовать это, где я могу определить ReliableQueue ?? очевидно, что (?), в результате чего задание будет выполняться на контроллере Web API, но где я могу удалить объект и когда? нет никакого события, в котором говорилось, что объект добавлен?

Как вы видите, я люблю некоторую помощь на этом

Благодарности

ответ

4

В вопросе, на который вы ссылаетесь, я описываю рисунок, показанный в WordCount sample.

В этом случае приложение составлено из службы шлюза без состояния и службы обработки состояния. Клиентский вход отправляется на шлюз без гражданства, а затем передается в службу состояния, где он изначально сохраняется в ReliableQueue. Параллельно существует бесконечный цикл while, который запущен внутри метода RunAsync, вытягивая элементы из очереди и обрабатывая их, при этом результаты сохраняются в ReliableDictionary. Этот шаблон полезен, если вы хотите быстро вернуть ACK к клиенту, который вы получили (и надежно сохраняете!), Его ввод и можете позволить асинхронно выполнять реальную обработку.

Обратите внимание, что если вы намерены хранить свое состояние в ReliableQueue/ReliableDictionary, то, вероятно, не так важно при обработке без участия лица без участия лица. Вам будет лучше просто переместить эту логику в тип в службе состояния и обработать там, так как вы, скорее всего, сбережете себе сетевой хоп вперед и назад.

+0

My Actor выполняет длительные рабочие места, им нужно извлекать информацию из разных источников и делать некоторые веб-страницы из веб-сайта клиентов. Вы все еще думаете, что положить все это в услугу с сохранением состояния может быть мудрее? – Kulpemovitz

+0

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

+0

Спасибо за помощь! – Kulpemovitz

1

Если я правильно понимаю ваш вопрос, вы просто ищете способ общаться с службы без гражданства в качестве актера. Если да, то вам не нужны надежные очереди - просто сделать звонок с ActorProxy например:

ActorId actorId = new ActorId("YourActorId"); 
string applicationName = "fabric:/YourAppName"; 
IYourActor actor = ActorProxy.Create<IYourActor>(actorId, applicationName); 
await dtoActor.DoWork(new WorkItem()); 

Service ткань будет маршрут этого вызова для вас.

1

У вас может быть служба состояния, которая будет деактивировать элементы из очереди в методе RunAsync (см. here для примера RunAsync()).

Когда вы деактивируете элемент, вы можете общаться с актером с помощью ActorProxy и просить его выполнить работу.

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