как вычислить номер порта при запросе конечной точки REST API в микросервисной архитектуре

#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