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