как обработать запрос от шлюза к правильному микросервису в реестре jhipster?

Мы использовали микросервисную архитектуру jhipster и сгенерировали три приложения uaa, microservice, gateway. затем запустите реестр uaa и jhipster на сервере, а также у нас есть несколько разработчиков полного стека, которые хотят одновременно разрабатывать как шлюз, так и микросервис.

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

как справиться с этой проблемой?


person Leila Mollaei    schedule 02.02.2020    source источник


Ответы (2)


У нас была та же проблема, и мы решили ее, используя переменную в качестве имени приложения микросервиса. Затем изменил все остальные URL-адреса в шлюзе с помощью этой переменной. Таким образом, каждому разработчику просто нужно изменить имя приложения в application.yml в микро так же, как и переменную в app.constants.ts на шлюзе. jhipster

person Hossein Jafari    schedule 17.02.2020
comment
Спасибо, у меня тоже работает. Я надеюсь, что команда jhipster внесет это изменение в архитектуру MicroService. - person Leila Mollaei; 18.02.2020

Совместное использование реестра и шлюза, вероятно, плохая идея. Разработчики полного стека должны запускать шлюз и реестр локально на своем ПК, использовать UAA только в том случае, если вы действительно хотите чем-то поделиться.

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

  • Со стороны клиента это можно сделать через URL-адрес или через HTTP-заголовок. Это означает, что вы можете настроить клиентский код так, чтобы он требовал определенной версии.
  • Эта дополнительная информация в запросе затем будет использоваться шлюзом для маршрутизации к службе, которая соответствует запрошенной версии.
  • Это работает, только если прокси Zuul в шлюзе знает, какая версия поддерживается каким экземпляром службы. Это означает, что каждый экземпляр должен добавить эту информацию о версии в свою регистрацию Eureka.

Вот 2 идеи, которые вы можете попробовать:

  1. версия в URL: определите профиль пружины (например, user) и используйте его для установки другого имени приложения в bootstrap-user.yml
  2. версия в заголовке: добавьте свойство в карту метаданных Eureka (eureka.instance.metadataMap в bootstrap.yml) и измените шлюз, чтобы он использовал эту информацию для маршрутизации.

Взгляните на Документация по серверу Spring Cloud Eureka, чтобы получить хорошее представление о том, как это работает, и вы можете получить еще лучшие идеи.

Вот статья о версиях API, которая может вас вдохновить: https://tech.asimio.net/2017/03/06/Multi-version-Service-Discovery-using-Spring-Cloud-Netflix-Eureka-and-Ribbon.html

person Gaël Marziou    schedule 02.02.2020
comment
Спасибо за ответ, запуск 4 приложений (реестр, uaa, микросервис, шлюз) требует больше ресурсов на ПК разработчика. Из-за этого мы запускаем реестр и uaa на сервере, а на их ПК запускаем только микросервис и шлюз. Я попробую то решение, которое вы предложили. - person Leila Mollaei; 03.02.2020
comment
Если вы правильно установили параметры памяти JVM для своих приложений, потребление ресурсов не должно быть проблемой. Если у ваших ПК не так много ресурсов, зачем выбирать микросервисную архитектуру? - person Gaël Marziou; 03.02.2020
comment
Jhipster предоставил возможность запускать реестр и uaa на сервере и подключаться к нему локально. Более того, что касается знаний о распределенных системах, мы сочли это решение более рациональным. - person Leila Mollaei; 03.02.2020