我有在各种VM环境中运行的服务:开发,测试,登台等。 我想将所有非产品环境的服务注册到单个eureka服务器。我区分这些服务的方式是使用相同的spring.application.name,但使用不同的eureka.instance.appname,例如:
eureka.instance.appname=${spring.application.name}_${spring.profiles.active}_${variant:}
同样,将同一服务部署为由$ {variant:}属性控制的不同变体(基于多个参数,例如region等)。 因此,在同一个环境中,例如在同一台服务器中,同一开发环境中的同一服务在不同端口中产生。
方法1: 服务通过以下方式注册: 服务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是'dev'环境中该变体'us'的eureka.instance.appname。
当我在最小配置下使用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"
}
现在的问题是,功能区无法加载这些serviceId的服务器列表,例如。 service_dev_us
令我感到困惑的是,我在同一台eureka服务器上注册了一些PCF服务,在该服务器上,我使用eureka.instance.appname,spring.application.name对于所有实例都完全相同的方式来区分这些服务服务。 PCF App的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:}
但是,当它们在eureka中注册时,instanceid中的主机名是唯一的。
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用作服务ID。
方法2:
我可以使VM应用程序与现有zuul配置一起工作的唯一方法是避免eureka.instance.appname并为每个变量(例如service_us,service_mx)使用单独的spring.application.name并在单独的eureka服务器中运行它们每种环境
Dev Eureka服务器
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服务器
service_us n/a (1) (1) UP (1) - testhostname:service_us:port1
service_mx n/a (1) (1) UP (1) - testhostname:service_mx:port2
是否可以使用第一种方法注册我的服务,即使用单个spring.application.name为同一服务的不同实例使用不同的eureka.instance.appname并在eureka中获得正确的映射,以便这些服务通过功能区正确解决了吗?