У меня есть служба, работающая в различных средах виртуальных машин: Dev, Test, Staging и т. Д.
Я хочу зарегистрировать сервисы для всех непроизводственных сред на одном сервере eureka. Я различаю эти сервисы, используя то же имя spring.application.name, но другое имя eureka.instance.appname, например:
eureka.instance.appname=${spring.application.name}_${spring.profiles.active}_${variant:}
Опять-таки, одна и та же служба развернута в виде разных вариантов (на основе нескольких параметров, таких как регион и т. Д.), Управляемых свойством $ {variable:}.
Таким образом, в одной и той же среде, скажем Dev, один и тот же сервис на одном и том же сервере порождается в разных портах.
Approach1:
Услуги регистрируются следующим образом:
service application.yml:
logging.level.org.springframework.jdbc.core=TRACE
management.endpoints.web.exposure.include=*
eureka.client.serviceUrl.defaultZone = http://${EUREKA_SERVER:localhost}:8761/eureka/
eureka.instance.leaseRenewalIntervalInSeconds= 1
eureka.instance.leaseExpirationDurationInSeconds= 2
eureka.instance.appname=${spring.application.name}_${spring.profiles.active}_${variant:}
Сервер eureka правильно регистрирует их как отдельные службы:
service_dev_us n/a (1) (1) UP (1) - devhostname:service:port1
service_dev_mx n/a (1) (1) UP (1) - devhostname:service:port2
service_test_us n/a (1) (1) UP (1) - testhostname:service:port1
service_test_mx n/a (1) (1) UP (1) - testhostname:service:port2
Здесь сервис - это spring.application.name.
service_dev_us - это имя eureka.instance.app для этого варианта «us» в среде «dev».
Когда я использую zuul с минимальной конфигурацией:
eureka:
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://${EUREKA_SERVER:localhost}:8761/eureka/
instance:
preferIpAddress: true
для автоматической маршрутизации этих услуг,
маршруты указаны правильно, как:
{
"/service_dev_us/**" : "service_dev_us"
}
Теперь проблема в том, что лента не может загрузить список серверов для этих сервисных идентификаторов, например, например. service_dev_us
В дополнение к моей путанице, у меня есть несколько служб PCF, зарегистрированных на одном и том же сервере eureka, где я дифференцирую эти службы точно так же, используя имя eureka.instance.appname, а spring.application.name одинаково для всех экземпляров. службы.
Приложение PCF yml
management:
endpoints:
web:
exposure:
include:
- "*"
eureka:
client:
serviceUrl:
defaultZone: ${EUREKA_SERVER}
instance:
prefer-ip-address: false
leaseRenewalIntervalInSeconds: 1
leaseExpirationDurationInSeconds: 2
appname: ${spring.application.name}_${spring.profiles.active}_${variant:}
Но там имена хостов в instanceid уникальны, когда они регистрируются в eureka.
PCFSERVICE_DEV_US n/a (1) (1) UP (1) - pcfservice-dev-us.pcf.com:e8be8933-7216-4a58-50f5-d2e3
PCFSERVICE_TEST_US n/a (1) (1) UP (1) - pcfservice-test-us.pcf.com:3c36058f-00ea-4ac9-6555-8ba0
Тот же сервис zuul с той же минимальной конфигурацией может правильно отобразить его
{
"/pcfservice_dev_us/**" : "pcfservice_dev_us"
}
И на ленте тоже нет проблем с получением списка серверов.
Итак, службы pcf работают для имени eureka.instance.appname как идентификаторы службы.
Approach2:
Единственный способ заставить приложения VM работать с существующей конфигурацией zuul - это избежать eureka.instance.appname и иметь индивидуальные spring.application.name для каждого варианта, такого как service_us, service_mx, и запускать их на отдельных серверах eureka для каждая среда
Dev Eureka Server
service_us n/a (1) (1) UP (1) - devhostname:service_us:port1
service_mx n/a (1) (1) UP (1) - devhostname:service_mx:port2
Тест Eureka Server
service_us n/a (1) (1) UP (1) - testhostname:service_us:port1
service_mx n/a (1) (1) UP (1) - testhostname:service_mx:port2
Можно ли зарегистрировать мои сервисы, используя первый подход, т. Е. Разные eureka.instance.appname для разных экземпляров одного сервиса с одним spring.application.name и получить правильное сопоставление в eureka, чтобы сервисы были правильно разрешено с помощью ленты?