Проблема проектирования параллельной обработки MSMQ

У меня есть служба Windows, написанная на C #, которая читает из MSMQ и в зависимости от типа сообщения назначает их агентам, которые обрабатывают это сообщение в рабочем потоке. Приложение запускается без агентов и создается динамически во время выполнения по мере поступления сообщений в MSMQ

. Вот схема того, как это работает:

enter image description here

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

Я пытаюсь выяснить, что может быть лучшим способом справиться с этим сценарием. Прямо сейчас локальные очереди представляют собой System.Concurrent.ConcurrentQueue. Вероятно, я мог бы использовать базу данных Sql Ce или какое-либо другое постоянное хранилище, но меня беспокоит производительность. Другая вещь, на мой взгляд, заключается в том, чтобы читать из MSMQ только тогда, когда агенты готовы обработать сообщение, но проблема в том, что я не знаю, какое сообщение будет содержать MSMQ.

Какие возможные подходы я могу использовать в этом вопросе?

6
задан Obaid 18 July 2012 в 06:55
поделиться