Чтобы ответить быстро, я бы сказал, что это зависит от ваших потребностей.
Да, событийная шина может быть хорошим способом для естественной обработки связи между строками микросервисов с использованием асинхронной и неблокирующей парадигмы.
Но в некоторых случаях вам может понадобиться:
- для обработки некоторых общих шаблонов предприятий, таких как механизмы воспроизведения, постоянство сообщений, чтение транзакций
- , чтобы иметь возможность обрабатывать какие-тосообщения в хронологическом порядке
- для обработки связи между несколькими видами микросервисов, которые не все написаны с использованием одного и того же фреймворка / инструментария или даже языка программирования
- для обработки надежности, устойчивости и восстановления после сбоя, когдавсе ваши потребители / микросервисы / статьи умерли
- для поддержки динамической горизонтальной масштабируемости и мониторинга ваших потребителей / микросервисов / статей
В этих случаях я предпочел бы выбрать Apache Kafka вместородной Eventbus или старый очарованный JMS комгибкая система.
Запрещается использовать и eventbus, и kafka в одной архитектуре микросервисов в соответствии с вашими реальными потребностями.Например, у вас может быть одна группа потребителей kafka, которая читает тему kafka для управления механизмом масштабирования, мониторинга, восстановления после сбоев и ответа, а затем обрабатывает связь между вашими подзаказами через шину событий.
Я поясню немногонемного о масштабируемости и мониторинге и объясню, почему я думаю, что проще справиться с этим с Kafka в собственном EventBus и кластерном режиме с помощью vert.x: Kafka позволяет нам знать в режиме реального времени ( через JMX метрики и команда describe
):
- «задержка» темы, которая соответствует количеству непрочитанных сообщений
- количество потребителей в каждой группе, которые слушают тему
- количество разделов темы, затронутых каждым потребителем
- показатели ввода / вывода
Таким образом, можно использовать решение ElasticStack или Prometheus + Grafana для мониторингаэти метрики и использовать их для обработки динамической масштабируемости (когда вы знаете, что необходимо увеличить временныеИли количество потребителей, например, в соответствии с метрикой отставания и количеством разделов и метриками cpu / ram / swap ваших хостов).
Чтобы ответить на второй вопрос vert.x или SpringBoot, мой ответ будетне очень объективно, но я бы проголосовал за vert.x за его производительность на JVM и особенно за его простоту.Я немного устал от фабрики Spring и ее больших слоев абстракции, которая скрывает множество проблем под горой аннотаций, запускающих гору АОП.
Более того, в мире микросервисов Java есть другие альтернативы SpringBoot, такие как различные реализации Microprofile (например, thorntail project ).