Service Fabric - локальный кластер - организация очереди - PullRequest
0 голосов
/ 16 октября 2018

Я нахожусь в ситуации, когда я могу использовать Service Fabric (локально), но не могу использовать служебную шину Azure (или что-либо «облачное»).Что будет следствием для очередей / pub-sub?Service Fabric разрешена, поскольку она может работать в локальном контейнере и является «бесплатной».Другая сторонняя инфраструктура обмена сообщениями, такая как RabbitMQ, также не обсуждается (на данный момент).

Я создал системы с использованием локальной шины, построенной на MSMQ и WCF, но я не понимаю, каксделать то же самое в SF.Я подозреваю, что службы SF могут использовать пользовательский ICommunicationListener, который предоставляет msmq, но который будет доступен только внутри кластера (как я понимаю).Я могу построить HTTPBridge (в SF) перед ними, чтобы сделать их доступными вне кластера, но тогда я потеряю разъединение на весь срок службы (клиент мог вызывать службу, используя очереди, даже если эта служба не подключена)в то время), так как сам мост не извлечет выгоду ни от одного из аспектов организации очередей.

У меня есть несколько возможностей, но все страдают от некоторой болезни, которая существует только из-за SF, локально.Кроме того, тот же код необходимо легко развернуть в полной версии Azure SF (где я могу использовать ASB, и эта проблема исчезает), поэтому я не хочу создавать две отдельные системы только из-за того, что в некоторых случаях я размещаю его.

Спасибо за любые советы.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Проблема не в SF. Главная проблема вашего проекта заключается в том, что вы связываете архитектурные требования с реализациями.SF работает поверх VirtualMachines, в конце концов, единственное отличие состоит в том, что SF размещает сервисы на этих машинах, используя другое решение, в котором у вас будет агент, внедряющий эти сервисы, или выполняющее развертывание вручную.Проблемы одинаковы.

Из описания ясно, что требование в вашем проекте - это необходимость в очереди сообщений, концепция очередей одинакова, независимо от того, является ли это служебной шиной, RabbitMQ илиMSMQ.Каждый из них будет иметь базовые основы очередей со спецификой каждой реализации, некоторые могут добавлять транзакции, некоторые могут реализовывать несколько шаблонов и т. Д.

Если вы разрабатываете на основе конкретной реализации, вы объедините свое решениереализации и сделать ваше решение трудным в обслуживании и решать проблемы, как вы описали.

Такие решения, как NServiceBus и Masstransit уменьшают многие из этих связей из вашего кода, и если вы считаете, что их недостаточно, вы можете создатьваша собственная абстракция.Затем вы используете конфигурации, чтобы связать свою бизнес-логику с реализациями.

Несмотря на вышеприведенный совет, я бы не рекомендовал использовать разные решения для среды, поскольку, как уже говорилось ранее, каждое решение имеет свои собственные реализации, и онимогут не ассимилироваться друг с другом, например, вы можете столкнуться с проблемами в производственном процессе, поскольку вы разрабатывали для MSMQ в средах DEV и TEST, а при развертывании в Production вы используете ServiceBus, у них есть разные ограничения, такие как размер сообщения, срок хранения и сын в.

Если вы хотите использовать MSMQ, вы можете добавить MSMQ к виртуальным машинам, на которых работает ваш кластер, и без проблем подключаться к вашим службам.Сначала взгляните на эту SO: Как использовать MSMQ в Azure Service Fabric

0 голосов
/ 16 октября 2018
  1. Вы можете создать это самостоятельно, например, , как это .При этом используется BrokerService, который будет распространять данные сообщений подписанным службам и субъектам.
  2. Вы также можете запустить контейнерную платформу очередей , как RabbitMQ с томами .

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

...