Позвольте мне сначала определить проблему и почему была выбрана очередь сообщений. У меня есть слой данных, который будет транзакционным, и ЧРЕЗВЫЧАЙНО вставлять тяжелые данные, и вместо этого я попытаюсь справиться с этими проблемами, когда они возникнут. Я надеюсь реализовать свое приложение с нуля с учетом этого.
Я решил решить эту проблему с помощью очереди сообщений Microsoft и выполнять вставки, если позволяет время, асинхронно. Однако я быстро столкнулся с проблемой. Определенные вставки, которые я выполняю, могут быть немедленно вызваны (то есть извлечены) (представьте, что это для системы POS и что произойдет, если вам нужно отозвать последнюю транзакцию - ту, которая еще не была вставлена).
Я решил решить эту проблему путем абстрагирования MessageQueue и объединения его на своем уровне доступа к данным, создавая тем самым иллюзию единого набора данных, возвращаемых пользователю уровня данных (я рассмотрел другие проблемы, которые происходят в таком сценарии (то есть: по сути грязное чтение и тому подобное) и пришли к выводу, что для моих целей я могу контролировать эти проблемы).
Однако это то, где вещи становятся немного неприятными ... Я разобрался, как вернуть сообщения и тому подобное (достаточно тривиальная проблема), но я застрял; как создать общий (или, по крайней мере, несколько общий) способ запроса моей очереди сообщений? Один, где я могу минимизировать дублирование между запросами SQL и запросами MessageQueue. Я рассмотрел использование LINQ (но очень ограниченно разбирался в технологии), а также попытался реализовать его с помощью Predicates, что пока довольно вонючее.
Есть ли шаблоны для такой проблемы, которые я могу использовать? Я поступаю об этом неправильно? У кого-нибудь есть свои идеи о том, как я могу решить эту проблему? Кто-нибудь вообще понимает о чем я? : -)
Любой и ВСЕ вклад будет высоко оценен и серьезно рассмотрен…
Еще раз спасибо.
Для всех, кто заинтересован. Я решила в
конец просто кешировать
транзакция в другом месте и
использовать MSMQ, как задумано и описано
ниже.