Управляемая событиями архитектура в службах с несколькими экземплярами - PullRequest
1 голос
/ 24 июня 2019

Мы используем микросервисную архитектуру в нашем проекте. Мы разворачиваем каждый сервис в кластере, используя Kubernetes. Сервисы разрабатываются с использованием языка программирования Java и среды Spring Boot. Для каждого сервиса существуют три реплики. Сервисы общаются друг с другом, используя только события. RabbitMQ используется в качестве очереди сообщений. Одна из служб используется для отправки электронной почты. Детали электронной почты предоставляются другой службой с событием. Когда событие SendingEmail публикуется службой, три копии почтовой службы потребляют событие, и одно и то же сообщение отправляется три раза. Как я могу предотвратить отправку электронной почты двумя другими службами?

1 Ответ

2 голосов
/ 24 июня 2019

Я думаю, это зависит от того, как вы работаете с Rabbit MQ.

Вы можете сконфигурировать rabbit mq с одной очередью для этих событий и сделать приложения с весенней загрузкой, которые представляют отправляющие серверы, чтобы быть "конкурирующими" потребителями.

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

Из того, что вы описали, все они получают сообщение, поэтому оно работает как pub-sub (что также является возможным способом работы с rabbit mq, но в данном случае это не очень хорошо).

...