Асинхронно отправлять сообщения в сторонние системы - очередь? - PullRequest
2 голосов
/ 31 октября 2011

У нас есть веб-приложение ASP.NET MVC, которое позволяет пользователям публиковать сообщения на веб-сайте.Наряду с этим пользователь также может синдицировать этот контент сообщения другим сторонним системам, когда они публикуют сообщение.

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

Я могу подумать о следующих возможностях

  • Сохраните сторонние сообщения в таблице базы данных и попросите некоторый рабочий процесс прочитать элементы из таблицы и отправить их в сторонние системы.
  • Использовать «правильную» очередь сообщений какого-либо типа, например nServiceBus или RabbitMQ (у меня естьнет опыта ни с одним из них)

Есть ли лучший способ сделать это?Меня особенно интересует, как уведомить пользователя о том, что сообщение было синдицировано правильно (так как оно является асинхронным), а также о том, как обрабатывать множественные ошибки повторных попыток, после чего отправитель должен просто отказаться.

Спасибо

Джеймс

Ответы [ 2 ]

1 голос
/ 01 ноября 2011

NServiceBus - отличная среда для реализации асинхронной связи.Если вы используете его для этого варианта использования, вы увидите много других возможностей применения обмена сообщениями для повышения масштабируемости и надежности вашей системы.

Создание сообщения о событии MessagePosted, которое публикуется после сохранения сообщения в базе данных.Для каждой сторонней системы, которая может быть уведомлена о сообщении, создайте класс обработчика событий, который реализует IHandleMessages.

NServiceBus облегчает множественные ошибки повторных попыток, просто выведите исключение в обработчик событий, если что-то пойдет не так.Событие будет повторно отправлено в обработчик события для настраиваемого числа попыток, прежде чем событие будет перемещено в очередь ошибок.

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

Используйте этот пример подписки для публикации, чтобы быстро набрать скорость: http://docs.particular.net/samples/pubsub/

0 голосов
/ 31 октября 2011

Вы должны прочитать это: объясняется, как использовать sub sub с RabbitMQ http://www.rabbitmq.com/tutorials/tutorial-three-java.html

...