Вопрос

Я интегрирую различные ограниченные контексты со служебной шиной Windows, и у меня есть несколько вопросов:

1) Как обнаружить дубликаты в других ограниченных контекстах?Сохранить последнюю обработанную последовательность сообщений?Я хочу иметь возможность повторно запускать события, чтобы обеспечить повторную синхронизацию новых ограниченных контекстов HandleEvent(OrderPlaced orderPlaced, bool isReplay) которые будут подключены к производству в будущем для первоначальной синхронизации.

2) Для шины межконтекстных сообщений будем ли мы использовать тему для каждого ограниченного контекста (и иметь пространство имен для группировки ограниченных контекстов)?Или один ограниченный контекст для каждого пространства имен?

3) В документации по шине сообщений говорится, что сообщения могут поступать не по порядку, какой алгоритм следует использовать для повторной сборки по порядку?Что произойдет, если сообщения 6 и 8 будут получены, но 7 так и не придет?Будем ли мы ждать указанное время, а затем просто продолжим?Как разрешить самовосстановление?

4) Я полагаю, что вышесказанное довольно распространено почти во всех проектах DDD, существуют ли какие-либо библиотеки, которые обрабатывают обмен сообщениями, включая протокол команд/ответов, для запроса синхронизации предыдущих событий из внешнего ограниченного контекста?

Это было полезно?

Решение

Это не отвечает на большинство ваших вопросов, но дает вам альтернативу.

Многие из этих проблем исчезли, когда я начал извлекать события вместо того, чтобы передавать их мне.Если я вытягиваю, я просто сохраняю контрольную точку с номером события, до которого я обработал.Когда мне нужно перестроить, я удаляю прочитанные модели и контрольную точку, и новые прочитанные модели будут созданы автоматически.Поскольку я использую один writer, дубликаты не являются проблемой.Оформить заказ тоже не проблема.

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

Имеет ли это смысл для вас, зависит от того, насколько быстро вам нужно реагировать на происходящее и насколько свежими должны быть ваши данные (1 секунда против 30 секунд и т.д.).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top