2015-04-21 6 views
1

В момент Moment мы проектируем и планируем преобразовать нашу систему в шаблон архитектуры микросервиса.Microservice Event с дизайном с несколькими экземплярами

Для ослабления сцепления мы думаем о конструкции, управляемой событиями, с тематикой JMS. Это выглядит великолепно. Но я не понимаю, как мы можем решить проблему с несколькими экземплярами микросервиса. Для отказоустойчивости и балансировки нагрузки у нас есть n экземпляров каждой услуги. Если событие опубликовано в теме, каждый экземпляр получит и обработает это событие.

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

Есть ли какое-нибудь хорошее решение или передовая практика для этого шаблона?

ответ

5

Почему бы не использовать Queue вместо Topic? Тогда ваши экземпляры будут конкурировать за сообщения, а не все получать копию.

EDIT

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

Я также видел темы JMS, используемые, когда конкурирующие клиенты соединяются с одним и тем же идентификатором клиента. Некоторые (все?) Брокеры разрешают только одному клиенту. Другие продолжают пытаться подключиться, пока не исчезнет текущий потребитель.

+0

С очередью нам нужно по одному для каждого служебного сообщения. Это недостаточно развязано. У нас будет около 15 - 20 Microservice. У каждого сервиса есть 2 - 10 событий для публикации. И некоторые события обрабатываются несколькими службами. Таким образом, мы должны реализовать A send Event to B, A Send Event to C вместо A publish Event и B, C Прослушать событие. – Matthias

+0

Большое спасибо. Я нашел VirtualDestinations для ActiveMQ и Fanout для RabbitMQ. Оба могут решить мою проблему и должны хорошо работать с моим вариантом использования. – Matthias

Смежные вопросы