Вот мой сценарий:Зависимости между сообщениями очереди сообщениями
- У меня есть два сервера с многопоточными очередями сообщений потребителя на каждом (всего два потребителя).
- У меня много типов сообщений (CreateParent, CreateChild и т. Д.)
- Я застрял с плохим устаревшим кодом (создание ребенка частично создаст родителя. Я знаю, что это плохо ... Но я не могу это изменить.)
- Сообщение не может быть принята (принцип очередности сообщений!)
- RabbitMQ - мое сообщение, обслуживающее брокера.
Моей проблема:
- Когда два потока работает одновременно (один выполнение CreateParent, другое выполнение CreateChild), они порождают конфликты, потому что два поток пытается создать подразделы в базе данных (помните, унаследованного кода)
Мое первое решение:
- Внутри потребителя , Я создал концепцию блокировки объектов. Поэтому, когда поток обрабатывает сообщение CreateChild, например, он блокирует дочерний элемент и родителя (устаревший код !!), поэтому обработка сообщений CreateParent может подождать. Я использовал базовый монитор .net и список идентификаторов для реализации этой концепции. Это работает хорошо.
Мое начальное ограничение решение:
- Моя концепция «сущность замок» хорошо работает на одного потребителя в одном процессе на одном сервере. Но он не будет работать на нескольких серверах с несколькими потребителями.
- Я думаю об использовании общей базы данных для «хранения» концепции блокировки сущности, поэтому каждый процесс (и потоки) может обращаться к базе данных, чтобы проверить, какие объекты заблокированы.
Мой вопрос (наконец!):
Все это становится очень сложным, и это увеличивает проблемы ошибок риска и обслуживание кода. Мне действительно не нравится! Кто-нибудь уже сталкивался с такой проблемой? Являются ли они приемлемыми обходными решениями для этого? Есть ли у кого-нибудь идеи для чистого решения для моего сценария?
Спасибо!