#spring #api #rest #microservices
#spring #API #rest #микросервисы
Вопрос:
У меня нет большого опыта работы с микросервисами, и я не совсем понимаю, как действовать в ситуации, описанной ниже. У меня есть две веб-службы, производитель и потребитель. Они обмениваются данными через Apache Kafka, сам производитель периодически выбрасывает сообщения со случайным id и score, а потребитель вычисляет и сохраняет средний балл для каждого id в Map.
Итак, мне нужно реализовать конечную точку REST API, которая при предоставлении идентификатора возвращает средний балл, соответствующий этому идентификатору. На самом деле, я создал обычный метод в контроллере потребителя для этой цели (GET request). Я проверил на Почтальоне, он работает хорошо. Но как насчет того, что в одной группе много экземпляров потребителей, а не только один, в этом случае клиент не знает, на какой порт отправлять запрос? В конце концов, каждый экземпляр запускается на порту, который выбирается ОС (server.port = 0). В этом случае, чтобы все работало так, как должно, мне нужно добавить некоторые дополнительные сервисы, или я могу что-то сделать без них каким-то другим способом?
Just in case, I am adding the application.properties files if somebody needed for the answer:
Producer:
spring.cloud.stream.bindings.output.destination=customers
spring.cloud.stream.bindings.output.producer.partitionKeyExpression=payload.id
spring.cloud.stream.bindings.output.producer.partitionCount=10
Consumer:
spring.cloud.stream.bindings.input.destination=customers
spring.cloud.stream.bindings.input.group=customer_group
spring.cloud.stream.instanceCount=10
server.port=0
Ответ №1:
Вы должны либо жестко запрограммировать информацию о порте, либо использовать службу обнаружения службы балансировки нагрузки, которая будет маршрутизировать запросы между экземплярами службы.
Например, Consul Fabio или балансировщики нагрузки Kubernetes