Архитектура системы на основе очередей

У меня есть система из 12 служб Windows, скажем, A, B ... M. Они обмениваются информацией только через очередь (в данном случае MSMQ). Система работает линейно - внешняя сторона вызывает A, который публикует сообщение в очереди, которую использует B. Формат вывода фиксирован, скажем, AResult. B читает AResult, выполняет некоторую обработку и публикует BResult для обслуживания C и т. Д.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что сервисам, находящимся в процессе разработки, нужны данные, не предоставленные предыдущим шагом. Например, сервис F нуждается в свойствах BResult.

Я рассмотрел несколько альтернатив, но все они имеют недостатки:

  1. Передайте словарь всех предыдущих результатов. Таким образом, скажем, что F сможет читать AResult, BResult и т. Д. Проблема в том, что это приведет к высокой связи, любое изменение в любом месте может сломать другие службы.

  2. Имейте глобальный объект Бога, который населяют различные услуги. Я делал нечто подобное раньше, и это закончилось очень сложно.

  3. Поддерживайте специальный объект из наиболее полезных данных и передавайте его по каждому результату. Например, D получает CResult и GlobalContextData и публикует DResult и GlobalContextData. Проблема состоит в том, чтобы решить включить в контекст и поддерживать его.

0 ответов

Другие вопросы по тегам