我正在用eureka服务器注册DiscoveryClients。客户端服务的eureka.instance.appname与spring.application.name不同。在eureka服务器页面中,可以看到服务已正确注册。也就是说,service-id是我在相应应用程序的eureka.instance.appname中提到的名称,实例ID设置如下:
<host-where-the-service-runs>:spring.app.name:<port-where-the-service-instance-runs>
即,在eureka服务器页面中,其显示如下:
<eureka.instance.appname> n/a (1) (1) UP (1) - hostname:<spring.application.name>:port1
即使在zuulproxy客户端中,路由也被映射到服务ID(定义为eureka.instance.appname)。但是zuulproxy客户端功能区无法获取该服务ID的服务器列表。
客户端的application.properties:
management.endpoints.web.exposure.include=*
eureka.client.serviceUrl.defaultZone = http://${EUREKA_SERVER:localhost}:8761/eureka/
eureka.instance.leaseRenewalIntervalInSeconds= 1
eureka.instance.leaseExpirationDurationInSeconds= 2
spring.application.name=clientService
eureka.instance.appname=${spring.application.name}_${spring.profiles.active}_${variant:}
zuul的application.yml:
eureka:
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://${EUREKA_SERVER:localhost}:8761/eureka/
instance:
preferIpAddress: true
当客户端应用程序的spring.application.name与eureka.instance.appname不同时,Zuul / Ribbon无法从Eureka获取eureka客户端服务的服务器列表。 服务已在eureka中正确注册,但是在zuul的路线图中点击任何路线时,功能区将无法为任何服务加载服务器列表。 是否有使用zuul或功能区或eureka属性的配置,以使路由工作而无需手动为每个路由/ serviceID定义ribbon.listOfServers?因为,我认为这样做会失去动态路由的优势,这是在第一部分中拥有服务注册表的主要原因。