当serviceId为eureka.instance.appname时,使用zuul进行路由

时间:2019-06-13 08:13:03

标签: netflix-eureka netflix-zuul netflix-ribbon

我有在各种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中获得正确的映射,以便这些服务通过功能区正确解决了吗?

0 个答案:

没有答案
相关问题