2015-10-20 7 views
1

У меня есть базовая архитектура:Есть способ получить сообщение «Процесс завершен» в Azure Queue или Service Bus?

Сообщение очереди Web API в очереди и работнике (служба обратной обработки) деактивирует и обрабатывает сообщение.

Проблема заключается в том, что веб-API не знает, когда обработанный файл был обработан Рабочим.

Может ли рабочий предупредить Очередь о том, что сообщение успешно завершено, а очередь отправлена ​​обратно в веб-API «Событие завершения процесса»?

Одно решение, которое я имел в виду на:

После Web API очереди сообщения он проверяет каждую пару второго состояния сообщения:

Если статус сообщение с «Пек-Lock " - сообщение все еще обрабатывается.

Если сообщение не найдено в очереди - сообщение обработано (успешно или безуспешно это не имеет значения).

Но у Microsoft это не готовое решение?

ответ

3

Многие архитектуры, которым требуется отчет такого типа, обрабатываются отдельной очередью, идущей от процессора к запрашивающему. Вот почему на объекте BrokeredMessage есть даже ReplyTo property. Такой подход будет заключаться в том, что у реквестера будут свои очереди, которые он также наблюдал. Когда он создает сообщение, он устанавливает свойство ReplyTo и отправляет его. Когда рабочий обрабатывает сообщение, он отправляет сообщение завершения обратно запрашивающему лицу, используя путь очереди, предоставленный исходным сообщением.

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

Обычно это делается, когда запрашивающий должен знать что-то, и поэтому он может сообщить об этом каким-либо образом. Например, для обработки требуется веб-запрос. Запрос помещается в очередь и обрабатывается на задней панели, а сообщение завершения возвращается обратно в переднюю часть, где его собирают, и уведомление отправляется пользователю (в некоторых случаях через SignalR, который с объединительной платой на месте вам не придется беспокоиться о том, какой сервер интерфейса получил ответное сообщение).

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

+0

Спасибо, Майк, Итак, если я правильно понимаю, у вас есть одна главная очередь между веб-API и всеми экземплярами Worker и для каждого задания (сообщения) в главной очереди. У меня будет другая подсекция только для разговора между веб-сайтом -API и конкретный рабочий, который обрабатывает работу? – Ron

+0

Одна очередь для обработки веб-API для рабочего пути.Затем либо одиночная очередь, которую просматривают все серверы Web-API, либо очередь на сервер веб-API, если конкретный исходный запрос Wep-API-сервера должен знать, что процесс был завершен. Это зависит от того, что делают серверы Web-API с ответом. – MikeWo

+0

Итак, для простейшего сценария мне нужны две очереди: 1 - Чтобы веб-API мог отправлять задания в него. 2 - Для веб-API, чтобы следить за завершением работы. У меня все получилось? если у вас есть внешние ссылки на статьи об этом, я буду благодарен :) Спасибо Mike – Ron