У нас есть центральный сервер, который отправляет и получает сообщения с нескольких компьютеров, которые расположены в клиентских сетях в разных местах. Чтобы облегчить это, в настоящее время я использую WCF с TCPNetBindings, используя двустороннюю связь, защищенную сертификатами.
Теперь у нас есть ряд проблем с этим - главным образом, нас просят поддержать «отключенный режим» (мы должны быть отказоустойчивыми). Из того, что я знаю, нет простого способа сделать это с помощью стека WCF - нам нужно что-то реализовать и, возможно, использовать msmq. В последнее время я смотрел на NServiceBus, и, насколько я понимаю, он, кажется, вполне соответствует требованиям - отказоустойчивость, сообщения можно отправлять через Интернет через простой http-шлюз и т. Д. Я знаю, что это хорошо уважают в сообществе, и Я могу понять, почему, глядя на это.
Итак, мой вопрос ... Похоже ли использование NServiceBus на разумную идею, или у кого-нибудь есть какие-либо другие предложения / опыт из реальной жизни, связанные с этим? Я думаю, я беспокоюсь о внедрении новой технологии, о которой я знаю относительно немного, и сталкиваюсь с проблемами с такими вещами, как ее защита, налаживание всего надежным способом, ошибки в пути ... Я также опасаюсь "золота- обожаю архитектуру, и выбираю что-то блестящее, что в конечном итоге заставит меня замолчать в реализации, а не придерживаться WCF и просто заставит это работать на меня ...
Благодарность!
источник
Ответы:
Мое предложение, если вам нужно быть быстрым в этом и нужно только что-то простое, чтобы упростить долговременную (отключенную) работу с WCF, это посмотреть на привязки WCF - MSMQ. Если вам нужно что-то в большей среде, посмотрите на nServiceBus.
На мой взгляд, nServiceBus действительно начал бы сиять в более крупной распределенной среде. Взять, к примеру, следующий пример (это было бы адом на земле с WCF, но просто с nServiceBus):
WCF имеет привязки MSMQ
Однако если вам нужно в основном придерживаться WCF (короткие сроки, нужны другие функции WCF), я бы посоветовал вам ознакомиться с этой статьей на MSDN. В нем показано, как использовать привязки WCF для MSMQ, а затем показано, как перенести один сервис из HTTP в MSMQ. По пути он показывает некоторые проблемы с этим сценарием (и полезные решения этих проблем).
Оба эти предложения интенсивно используют MSMQ, поэтому обратите внимание на это: в отличие от Apache MQ, RabbitMQ и других популярных систем массового обслуживания, MSMQ - это не типичная архитектура очереди на основе брокера, а распределенная очередь. Это означает, что если ваш клиент WCF отправляет сообщение через транспорт MSMQ, в то время как он не может подключиться к удаленному серверу, на котором размещена очередь, клиентский компьютер вместо этого поместит сообщение в очередь, которая называется «Исходящая очередь». Сообщение будет оставаться там безопасно до тех пор, пока служба MSMQ клиента не обнаружит, что она может снова подключиться к удаленной службе MSMQ. В этот момент сообщение будет передаваться от клиента до конечного пункта назначения.
Существует по крайней мере одно предупреждение: если удаленный сервер слишком долго находится в автономном режиме (проверьте документацию по MSMQ), клиент откажется и переместит сообщение из исходящей в очередь недоставленных сообщений. Сообщения, перенесенные в очередь недоставленных сообщений, не могут быть повторно отправлены автоматически, их необходимо восстановить.
Если вам требуется шифрование и у вас нет ActiveDirectory, в этой записи блога Сергей Сорокин подробно описывает шаги, необходимые для шифрования связи MSMQ с использованием WCF без Active Directory.
источник
Они не являются заменой 1 к 1 - во многих случаях вы будете использовать NServiceBus для подачи сообщений или получения сообщений от конечной точки WCF.
В любом случае, при обработке сценариев с отключенным режимом, подобных этим, очереди сообщений действительно блестят. NServiceBus - хорошее место для начала. Есть ряд других вариантов. Я отмечу, что многие из них на самом деле оборачивают MSMQ в конце дня - MSMQ - очень надежный бэкэнд, и его, вероятно, стоит использовать, когда он станет доступным.
источник