MSMQ с динамическими приоритетами - PullRequest
1 голос
/ 25 августа 2010

Сейчас я делаю проект с некоторыми временными ограничениями. Настройка: веб-служба принимает (крошечные) XML-файлы, и мне нужно быстро их обработать.

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

Так что теперь я смотрю на переменную загрузку входящих запросов, каждый из которых производит ~ 50 заданий на моей стороне. Технологии, доступные для использования, ограничены из-за правил клиентов. Если это не Sql Server или MS MQ, скорее всего, он не полетит.

Я подумал о том, чтобы пойти по маршруту MS MQ (веб-служба просто отправляет сообщения, затем несколько пользовательских процессов), и небольшая демонстрация концептуальных модулей работала как чудо.

Однако есть одна проблема: приоритет этих заданий может сильно измениться в очереди. Система достаточно критична по времени, поэтому, если мы - по каким-либо причинам - не можем своевременно обрабатывать входящие задания, нам нужно отдать предпочтение последним.

В основном сценарий использования меняется с надежного обмена сообщениями в целом на LIFO при (слишком) большой нагрузке. Старые записи еще нужно обработать, но они потеряли весь свой приоритет.

Есть ли какой-нибудь управляемый способ создать что-то подобное в MS MQ?


Расширение бизнес-стороны в соответствии с просьбой:

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

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

Подумайте, что я могу влиять на механические вещи и перенаправлять вещи, движущиеся на дорожке - если они еще не прошли точку X.

1 Ответ

1 голос
/ 25 августа 2010

Итак, если я понимаю, вы хотите иметь возможность переключаться между сортировкой очереди по приоритету ИЛИ по времени прибытия, в зависимости от ситуации.MSMQ может сортировать очередь только по приоритету и времени прибытия.

Хотя я понимаю, что вы пытаетесь сделать, я не совсем вижу для этого оправдание для бизнеса.Можете ли вы расширить это?

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

Приветствия
Джон Бруквелл

...