Руководство по архитектуре для реализации Rabbitmq .net

Я ищу некоторые рекомендации по реализации. Каковы плюсы и минусы использования привязок wcf или простого API vanilla .net rabbitmq. Момент, который мы тоже не обязаны использовать. Я новичок в rabbitmq, но сделал связку wcf.

У нас есть продукт, который собирает информацию от издателей на каждом устройстве. Продукт находится за брандмауэром (на данный момент). Издателю понадобится 3-4 канала.

  • Запрос/ответ на публикацию метрики для публикации/подписки на сервере с подтверждением от сервера.
  • Обновите канал, чтобы обновить базу правил издателя для обнаружения метрик с сервера.
  • Канал пульса для проверки работоспособности сервера и ответа на пульс сервера.
  • Возможный канал с мертвой буквой.

Издатель будет кроссплатформенным. Думаем о хостинге на Mono, Linux, BSD, Solaris, Android, MacOs, iOS и, возможно, Aix/HP-UX. Не знаю, насколько эффективными будут конечные точки wcf в этих случаях.

На сервере будет несколько рабочих, каждый из которых получит одно и то же сообщение от своего? очередь, подтвердите ее и обработайте в соответствии со своей собственной базой правил. Я хотел бы, чтобы рабочие были управляемы событиями. Сервер должен быть высокопроизводительным, от 10 000 до 100 000+ сообщений в минуту. Никакие сообщения не могут быть потеряны от издателя к серверу.

Я склоняюсь к использованию простого API, поскольку он предлагает большую гибкость в отношении таких вещей, как многопоточность/сериализация/управление сеансами/безопасность/сжатие, но продукт может быть перемещен в Azure и предлагаться как SaaS или PaaS, и иметь конечную точку wcf будет иметь смысл. поговорить с издателями в обоих окнах включения и выключения, но это будет в долгосрочной перспективе.


person scope_creep    schedule 24.10.2011    source источник
comment
Этот вопрос слишком широк. Рекомендую его удалить или значительно сократить (думаю, в этом нет необходимости).   -  person theMayer    schedule 29.11.2017
comment
Прошло много времени. На что ты решил?   -  person David Pettersson    schedule 01.03.2019
comment
Лучше разбить этот вопрос на несколько. Чтобы разделить нагрузку между рабочими, вы должны использовать -одну-надежную очередь, разделяемую между рабочими, явные ACK. Начните с простого, начните с одного работника. При скорости до пары сотен сообщений в секунду вашим узким местом будет ввод-вывод, связанный с обработкой (чтение/запись БД, другие побочные эффекты...), а не со стороны брокера, особенно при предварительной выборке › 1.   -  person istepaniuk    schedule 13.05.2019
comment
Это старый вопрос. Я был бы счастлив разделить его.   -  person scope_creep    schedule 15.05.2019


Ответы (1)


Архитектура программного обеспечения заключается в том, чтобы откладывать решения, а не принимать их заранее.

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

Выберите реализацию, которая сейчас наиболее целесообразна (с учетом ваших планов по переходу на Azure), но не женитесь на ней.

person istepaniuk    schedule 06.02.2021