Я делаю это, используя ActiveMQ в качестве центрального брокера сообщений (вы также можете использовать служебную шину Azure, если у вас есть подписка Azure) и предварительно запеченные доменные объекты.Для вашего сценария это может выглядеть следующим образом:
Веб-служба принимает данные XML / JSON
Да, у вас есть служба REST, которая принимает многочастные запросы, скажем, JSON какс клиентом легче работать.Прежде чем отправлять сообщения, обычно лучше преобразовать входящее клиентское сообщение в сообщение домена, чтобы все потребители сообщений знали точный ожидаемый формат и, следовательно, могли проверить сообщение.Я обычно создаю их, используя xsd.exe
в Windows, используя файл XSD
, который описывает формат объекта.xsd.exe
превращает XSD
в класс C #.Тогда это просто процесс взятия полей JSON и заполнения класса Order
.Затем Order
отправляется в качестве сообщения брокеру.В этот момент вы находитесь в зоне гарантированного обмена сообщениями, поскольку JMS позаботится об этом, а ActiveMQ позаботится о сохранности сообщений.
Локально хранит данные в файле
, а не файл, вы конвертируете входящий JSON в класс домена, например, экземпляр Order
.Вы никогда не увидите JSON или XML за пределами этой точки, так как здесь находятся все классы доменов.
Задача забирает файл и пытается загрузить данные в фоновом режиме
да, у посредника есть маршруты, определенные в конфигурации Camel, которые говорят ему, например, отправлять сообщения, поступающие по теме /client
, в тему /orders
.Задача настроена как постоянный подписчик темы, поэтому автоматически получает этот объект домена заказа.
Отправка электронного письма с ошибками записей
, если объект заказа содержит информацию оклиент (электронная почта и т. д.), затем задача может отправить электронное письмо в случае сбоя, но лучший способ - перенаправить сбойный заказ в тему /error
, где другая задача, которая снова является долговременным, подписчик темы поднимает его и регистрирует / отправляетэлектронная почта / аудит и т. д.
если объем заказов в ближайшем будущем увеличится в несколько раз
, вы можете объединить брокеров и запустить несколько потребителей заказов.Если вы разделяете обработку ошибок на другой маршрут, все, что нужно сделать для задачи заказа, - это обработать заказ и направить сообщение в тему /error
или /success
в зависимости от результата.Таким образом, каждый маршрут содержит небольшой кусочек головоломки, и вы можете увеличивать его, если загадка становится слишком большой.