Я полагаю, что это довольно распространенный сценарий интеграции. Лично я считаю, что решение для асинхронного обмена сообщениями, использующее очередь, идеально.
Вы должны быть в состоянии достичь синхронизации почти в реальном времени без дополнительных затрат или сложности, например, репликации.
Синхронные веб-сервисы не идеальны, потому что ваш код должен быть очень сложным для обработки сценариев сбоев. Что происходит, когда одна система перезагружается, а другая продолжает публиковать изменения? Получает ли система отправки таймауты? Что это с ними делать? Если вы не готовы потерять данные, вам нужно, чтобы какая-то транзакционная очередь (например, MSMQ) получала уведомления об изменениях и заботилась о том, чтобы они попадали в другую систему. Если какая-либо из систем не работает, изменения (переданные как сообщения) просто накапливаются, и, как только соединение может быть установлено, перезапускающий сервер обработает все сообщения, поставленные в очередь, и подтянется, что значительно облегчит достижение целостности системы.
Существуют некоторые инструменты с открытым исходным кодом, которые действительно могут упростить вам эту задачу, если вы используете .NET (особенно если вы хотите использовать MSMQ).
- nServiceBus , Udi Dahan
- Общественный транспорт Дрю Селлерс и Криса Паттерсона
Существуют также коммерческие продукты, и если вы рассматриваете коммерческий вариант, см. здесь для получения списка вариантов в .NET. Конечно, WCF может выполнять асинхронный обмен сообщениями с использованием привязок MSMQ, но такой инструмент, как nServiceBus или MassTransit, предоставит вам очень простой API Send / Receive или Pub / Sub, который сделает ваше требование очень простой задачей.
Если вы используете Java, существует любое количество реализаций служебной шины с открытым исходным кодом, которые сделают этот вид двунаправленного асинхронного обмена сообщениями проще простого, например, Mule или, возможно, просто ActiveMQ.
Возможно, вы также захотите прочитать блог Udi Dahan , слушая некоторые из его подкастов. Вот еще несколько хороших ресурсов , с которых можно начать.