0

Я использую Azure среды и разработки в .NETУправление несколькими Azure Service Bus очередями одновременно

Я бегу веб-приложение (ClientApp), который принимает данные клиента, чтобы выполнить ряд расчетов. Расчеты являются высокопроизводительными, поэтому они работают в отдельном веб-приложении (CalcApp).

В настоящее время ClientApp отправляет запрос вычисления CalcApp. Запросы от каждого клиента помещаются в общую очередь и запускаются по одному, FIFO. Моя цель - создать отдельные очереди для каждого клиента и выполнить несколько вычислений одновременно.

Я собираюсь использовать очереди Azure Service Bus для этого. На ClientApp служебная шина проверит наличие существующей очереди для этого клиента и при необходимости создаст ее. В CalcApp приложение будет периодически проверять существующие очереди. Если он найдет новую очередь, то он создаст новый QueueClient, который использует функции OnMessageAsync() и RunCalculationsAsync() в качестве функции обратного вызова.

Возможно ли это или даже хорошая идея?

ответ

0

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

Я не уверен, что необходимо иметь несколько очередей.

Подробнее о шаблоне Конкурирующие потребители.
https://msdn.microsoft.com/en-us/library/dn568101.aspx

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

+0

Я все еще способен обрабатывать дублирующее обнаружение с помощью этого шаблона? Возможно, клиент будет очень нетерпелив, запустив кнопку расчета. – clenard

+0

В двух экземплярах я предполагаю, что вы имеете в виду, что пользователь на конкретном клиенте запросил вычисления более одного раза, и более чем одно сообщение для одних и тех же вещей отправляется в очередь. Azure имеет двойное обнаружение, которое можно настроить. Кроме того, вы можете использовать постоянное хранилище, чтобы узнать, была ли эта задача уже выполнена. Вы можете создать таблицу SQL, DocumentDB и т. Д., Которая проверяет это условие в начале процесса. В конце процесса отметьте это значение, чтобы следующий потребитель, который должен обработать, знает, что это уже сделано. – DanielG

+0

Информация о локальном обнаружении дубликатов: http://blog.iquestgroup.com/en/windows-azure-service-bus-duplicate-detection/#.Vnl7CblIjmF – DanielG