当前位置: 首页 > 知识库问答 >
问题:

负载均衡器没有可用的服务器为客户端:会议

毕宏盛
2023-03-14

当我试图通过Zuul网关访问服务会议时,Zuul无法将请求转发到相应的服务。以下是我面临的错误:

  1. nettflix.zuul.exception.ZuulExc0019:转发错误
  2. 导致:com.netflix.client.ClientExc0019:负载均衡器没有可用的服务器为客户端:会议

让我分享一下这个应用程序。yml服务,尤里卡和祖尔网关。

EurekaClient:应用程序。yml

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
    lease-renewal-interval-in-seconds: 300
  client:
    register-with-eureka: false
    fetch-registry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

Zulgateway:应用程序。yml

server:
  port: 8085

spring:
  application:
    name: gatekeeper


zuul:
  routes:
    meeting: /meeting/**
    serviceId: meeting

ribbon:
  eureka:
    enabled: false

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

Zulgateway:SpringBootApplication

package com.sagarp.gatekeeper;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class MeetingApplication {

    public static void main(String[] args) {
        SpringApplication.run(MeetingApplication.class, args);
    }
}

我的服务类(会议):应用程序。yml

server:
  port: 0
spring:
  application:
    name: meeting
  datasource:
    url: jdbc:mysql://localhost:3306/sagarp?useSSL=false
    username: myUserName
    password: myPassWord
  jpa:
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
    hibernate:
     ddl-auto: update

eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    lease-renewal-interval-in-seconds: 5

我的服务类(会议):springbootplication

package com.sagarp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class MeetingApplication {

    public static void main(String[] args) {
        SpringApplication.run(MeetingApplication.class, args);
    }
}

如您所见,配置确保我的所有服务都被eureka客户端发现。

在eureka控制台,我已经验证了相同的,zuul网关我的服务(会议)都是可见的。

为了更好地查看,您可以访问我的git repo。https://github.com/sagar-patro/demo-microservices

任何帮助都是非常感激的

共有1个答案

汪玮
2023-03-14
ribbon:
  eureka:
    enabled: false

Spring Cloud Netflix Zuul使用Netflix的Ribbon执行客户端负载平衡,默认情况下,Ribbon将使用Netflix Eureka进行服务发现。您正在跳过服务发现,因此已设置功能区。尤里卡。已启用错误。由于Ribbon现在无法使用Eureka查找服务,因此您必须为会议服务指定url:

meeting:
  ribbon:
    listOfServers: localhost:8080

我会给你讲清楚的。

依赖项org.springframework.cloud: sping-lowd-starter-netfle-zuul,您目前正在门守卫项目中使用,它有几个编译依赖项:

com.netflix.zuul:zuul-core
org.springframework.boot:spring-boot-starter-web        
org.springframework.boot:spring-boot-starter-actuator       
org.springframework.cloud:spring-cloud-netflix-zuul
org.springframework.cloud:spring-cloud-starter      
org.springframework.cloud:pring-cloud-starter-netflix-hystrix
org.springframework.cloud:spring-cloud-starter-netflix-ribbon
org.springframework.cloud:spring-cloud-starter-netflix-archaius

正如您所看到的,它由围绕com的许多组件组成。netflix。zuul:zuul核心模块(包括用于发现的Eureka和用于路由的Ribbon):

当您启动门卫应用程序时,将应用默认的ZuulProxyAutoConfiguration配置。它导入Ribbon配置类:

@Configuration
@Import({ RibbonCommandFactoryConfiguration.RestClientRibbonConfiguration.class,
        RibbonCommandFactoryConfiguration.OkHttpRibbonConfiguration.class,
        RibbonCommandFactoryConfiguration.HttpClientRibbonConfiguration.class,
        HttpClientConfiguration.class })
@ConditionalOnBean(ZuulProxyMarkerConfiguration.Marker.class)
public class ZuulProxyAutoConfiguration extends ZuulServerAutoConfiguration { ... }

反过来,初始化RibbonLoadBalancingHttpClient,这是您看到的错误消息的责任。

默认情况下,RibbonLoadBalancingHttpClient使用来自com的ZoneAwareLoadBalancer。netflix。功能区:功能区负载平衡器软件包:

默认情况下,Zuul使用Ribbon中的ZoneAware LoadBalancer进行负载平衡。该算法是发现中可用实例的循环,可用性区域成功跟踪恢复。负载均衡器将保持每个区域的统计数据,如果故障率高于可配置的阈值,将删除一个区域。

如果要使用自己的自定义负载平衡器,可以为该功能区客户端命名空间设置NFLoadBalancerClassName属性,或覆盖DefaultClientChannelManager中的getLoadBalancerClass()方法。请注意,您的类应该扩展DynamicServerListLoadBalancer

它解释了Zuul将路由和负载平衡工作委托给Ribbon组件,并证明您实际上是在门卫项目中使用Ribbon。

除非您选择不同的负载平衡器,否则您应该选择我最初的答案<我希望这会有帮助。

 类似资料:
  • 我一直在尝试使用Zuul和Eureka连接微服务,除了通过基于ServiceID的Zuul重新路由之外,大部分都成功了。我拥有的是Spring Boot Zuul和Eureka应用程序,以及一个在Eureka注册的基于节点的微服务。Zuul和微服务都在Eureka注册,并显示在Eureka控制面板上,但是,当我试图通过Zuul路由到微服务时,我会遇到以下异常: 通过IP路由似乎有效,但我不需要它。

  • 我试图获得一个简单的微服务注册到尤里卡服务器,然后有Zuul代理到微服务。我得到了微服务注册到尤里卡服务器。然而,每当我打开Zuul服务时,我看到它没有注册到Eureka服务器。每当我试图路由到微服务时,我会得到以下异常: 负载均衡器没有可用于客户端的服务器:微服务 微服务组件 microserviceapplication.java bootstrap.yml eureKaserverAppli

  • 我正在尝试以下教程:使用Eureka的Spring Boot微服务和使用Feign Client的Zuul代理。 我创建了3个微服务:一个使用Zuul的Api网关,一个使用Feign的资源服务,一个使用Eureka的发现服务,以及另一个包含前端应用程序的业务逻辑的微服务PRIMO用户管理服务。 当我试图从API网关调用URL时,我面临一个错误“转发错误”:http://localhost:8662

  • Ribbon是一个客户端负载均衡器,它可以很好地控制HTTP和TCP客户端的行为。Feign已经使用Ribbon,所以如果您使用@FeignClient,则本节也适用。 Ribbon中的中心概念是指定客户端的概念。每个负载平衡器是组合的组合的一部分,它们一起工作以根据需要联系远程服务器,并且集合具有您将其作为应用程序开发人员(例如使用@FeignClient注释)的名称。Spring Cloud使

  • 我想知道是否有可能将Google云负载平衡器链接到一个外部服务器——一个托管在Google云之外的服务器? 因此,负载均衡器可能会链接到Google Cloud实例,但也可能链接到外部服务器。

  • 我们目前有一个google云设置,在TCP负载平衡器后面有一个后端服务(一个由3台vm机器组成的托管实例组)。在前端配置中,我们有一个静态外部ip地址,将流量重定向到端口6443,并在连接到负载平衡器的端口6443上进行tcp健康检查。在后端服务中的3个vm实例中,最初只有一台计算机在端口6443上运行服务。因此,负载平衡器在负载平衡器详细信息页面中正确检测到一个运行状况实例和两个不正常实例。为了