Как сохранить порядок связанных сообщений в системе обработки сообщений? - PullRequest
0 голосов
/ 13 июня 2019

Система получает сообщения от MQ.По причине того, что в системе имеется несколько ВМ, реальный порядок обработки сообщений может не совпадать с порядком в MQ (и т. Д. Может обрабатываться одно более позднее сообщение, которое сохраняется в базе данных перед предыдущим сообщением).

Теперь я хочу, чтобы сообщения с одинаковым Business-ID могли обрабатываться как заказ при отправке.

Я могу получить одно предложение, что мы можем использовать одну виртуальную машину и читать сообщения из MQ.И получите Business-Id и распространите сообщения на целевую ВМ (сообщения с одинаковым Business-Id будут распространяться на одну и ту же ВМ).Это решит эту проблему, но есть только один поток для выполнения работы по распространению, производительность может быть не очень хорошей.

Есть ли другие способы решения проблемы?Подойдет любой блог, статья, открытый исходный код.

1 Ответ

0 голосов
/ 14 июня 2019

Одним из основных свойств обмена сообщениями в распределенных системах является то, что сообщения будут обрабатываться не по порядку.Распространенным решением является использование Saga (конечный автомат).С помощью Saga вы можете идентифицировать индексатор или ваш бизнес-процесс (например, orderId), а затем управлять длительным процессом.

Вот пример того, как NServiceBus решает эту проблему: https://docs.particular.net/nservicebus/sagas/?version=core_7.2

...