【问题标题】:Zuul Load balancer does not have available server for clientZuul 负载均衡器没有可供客户端使用的服务器
【发布时间】:2018-06-07 16:18:31
【问题描述】:

我一直在尝试使用 Zuul 和 Eureka 连接微服务,并且大部分都成功了,除了基于 serviceId 通过 Zuul 重新路由。我拥有的是 Spring Boot Zuul 和 Eureka 应用程序,以及一个向 Eureka 注册的基于节点的微服务。 Zuul 和微服务都在 Eureka 中注册并显示在 Eureka 控制面板上,但是,当我尝试通过 Zuul 路由到微服务时,出现以下异常:

com.netflix.zuul.exception.ZuulException: Forwarding error
Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: steam-auth-service

通过 IP 路由似乎可行,但我不需要。

Zuul application.properties:

server.port=8079
eureka.client.service-url.defaultZone=http://localhost:8088/eureka
zuul.routes.steam-auth-service.serviceId=steam-auth-service
zuul.routes.steam-auth-service.path=/steam/**

Node.JS Eureka 客户端注册:

// Discovery service info
const eurekaServer = {
  host: process.env.EUREKA_HOST,
  port: process.env.EUREKA_PORT,
  servicePath: '/eureka/apps/',
};

// Client to connect to Eureka discovery service
const eurekaClient = new Eureka({
  instance: {
    app: 'steam-auth-service',
    hostName: 'localhost',
    ipAddr: '127.0.0.1',
    port: {
      $: process.env.PORT,
      '@enabled': true,
    },
    vipAddress: 'steamauth.pubgtrade.com',
    dataCenterInfo: {
      '@class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo',
      name: 'MyOwn',
    },
  },
  eureka: eurekaServer,
});

正如我所说,Zuul 应用程序和微服务都在 Eureka 中注册并显示在控制面板中。

/eureka/apps 响应:

<applications>
<versions__delta>1</versions__delta>
<apps__hashcode>UP_2_</apps__hashcode>
<application>
<name>STEAM-AUTH-SERVICE</name>
<instance>
<hostName>localhost</hostName>
<app>STEAM-AUTH-SERVICE</app>
<ipAddr>127.0.0.1</ipAddr>
<status>UP</status>
<overriddenstatus>UNKNOWN</overriddenstatus>
<port enabled="true">3001</port>
<securePort enabled="false">7002</securePort>
<countryId>1</countryId>
<dataCenterInfo class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo">
<name>MyOwn</name>
</dataCenterInfo>
<leaseInfo>
<renewalIntervalInSecs>30</renewalIntervalInSecs>
<durationInSecs>90</durationInSecs>
<registrationTimestamp>1514334766260</registrationTimestamp>
<lastRenewalTimestamp>1514334886300</lastRenewalTimestamp>
<evictionTimestamp>0</evictionTimestamp>
<serviceUpTimestamp>1514333831189</serviceUpTimestamp>
</leaseInfo>
<metadata class="java.util.Collections$EmptyMap"/>
<vipAddress>steamauth.pubgtrade.com</vipAddress>
<isCoordinatingDiscoveryServer>false</isCoordinatingDiscoveryServer>
<lastUpdatedTimestamp>1514334766260</lastUpdatedTimestamp>
<lastDirtyTimestamp>1514334766260</lastDirtyTimestamp>
<actionType>ADDED</actionType>
</instance>
</application>
<application>
<name>PUBG-API-GATEWAY</name>
<instance>
<instanceId>192.168.0.13:pubg-api-gateway:8079</instanceId>
<hostName>192.168.0.13</hostName>
<app>PUBG-API-GATEWAY</app>
<ipAddr>192.168.0.13</ipAddr>
<status>UP</status>
<overriddenstatus>UNKNOWN</overriddenstatus>
<port enabled="true">8079</port>
<securePort enabled="false">443</securePort>
<countryId>1</countryId>
<dataCenterInfo class="com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo">
<name>MyOwn</name>
</dataCenterInfo>
<leaseInfo>
<renewalIntervalInSecs>30</renewalIntervalInSecs>
<durationInSecs>90</durationInSecs>
<registrationTimestamp>1514334380413</registrationTimestamp>
<lastRenewalTimestamp>1514334890454</lastRenewalTimestamp>
<evictionTimestamp>0</evictionTimestamp>
<serviceUpTimestamp>1514334380413</serviceUpTimestamp>
</leaseInfo>
<metadata>
<management.port>8079</management.port>
<jmx.port>36983</jmx.port>
</metadata>
<homePageUrl>http://192.168.0.13:8079/</homePageUrl>
<statusPageUrl>http://192.168.0.13:8079/info</statusPageUrl>
<healthCheckUrl>http://192.168.0.13:8079/health</healthCheckUrl>
<vipAddress>pubg-api-gateway</vipAddress>
<secureVipAddress>pubg-api-gateway</secureVipAddress>
<isCoordinatingDiscoveryServer>false</isCoordinatingDiscoveryServer>
<lastUpdatedTimestamp>1514334380413</lastUpdatedTimestamp>
<lastDirtyTimestamp>1514334380381</lastDirtyTimestamp>
<actionType>ADDED</actionType>
</instance>
</application>
</applications>

感谢任何帮助。谢谢!

【问题讨论】:

    标签: netflix-eureka netflix-zuul spring-cloud-netflix


    【解决方案1】:

    为什么不使用 application.yml 而不是属性,这就是我在我的设置中的方式。可以直接上服务吗??即不通过 ZUUL。

    zuul:
      routes:
         path: /steam/**
         service-id: steam-auth-service
         strip-prefix: false
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8088/eureka
    

    【讨论】:

      猜你喜欢
      • 2017-05-15
      • 2019-02-09
      • 2021-04-20
      • 2017-12-25
      • 2019-04-09
      • 2019-03-23
      • 2019-08-18
      • 2016-04-02
      • 2017-06-05
      相关资源
      最近更新 更多