programing

로드 밸런서에 클라이언트: 회의에 사용할 수 있는 서버가 없습니다.

telecom 2023. 7. 24. 22:18
반응형

로드 밸런서에 클라이언트: 회의에 사용할 수 있는 서버가 없습니다.

내가 서비스에 접속하려고 하는 동안meetingZuul 게이트웨이를 통해 Zuul은 해당 서비스로 요청을 전달할 수 없습니다.제가 직면한 오류는 다음과 같습니다.

  1. 넷플릭스.zuul.tbs.tbs.Zuul 예외:출고오류
  2. com.netflix.client로 인해 발생합니다.클라이언트 예외: 로드 밸런서에 클라이언트: 회의에 사용할 수 있는 서버가 없습니다.

서비스용 application.yml, eureka 및 zuul 게이트웨이를 공유하겠습니다.

Eureka 클라이언트: Application.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/

주울 게이트웨이: application.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/

주울 게이트웨이: 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);
    }
}

내 서비스 클래스(미팅): Application.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

내 서비스 클래스(미팅): SpringBootApplication

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 클라이언트에서 모든 서비스를 검색할 수 있습니다.

유레카 콘솔에서, 나는 동일하게 확인했다,zuul gateway그리고.my service(meeting)둘 다 보입니다.

더 나은 보기를 위해, 당신은 나의 git repo를 방문할 수 있습니다.https://github.com/sagar-patro/demo-microservices

어떤 도움이라도 주시면 대단히 감사하겠습니다.

단답형

ribbon:
  eureka:
    enabled: false

Spring Cloud Netflix Zuul Netflix의 Ribbon을 사용하여 클라이언트 로드 밸런싱을 수행하며, 기본적으로 Ribbon은 서비스 검색을 위해 Netflix Eureka를 사용합니다.서비스 검색을 건너뛰어 다음을 설정했습니다.ribbon.eureka.enabled로.false이제 Ribbon은 Eureka를 사용하여 서비스를 검색할 수 없으므로, 다음에 대한 URL을 지정해야 합니다.meeting서비스:

meeting:
  ribbon:
    listOfServers: localhost:8080

확장 응답

제가 좀 더 명확하게 말씀드리겠습니다.

현재 에서 사용 중인 종속성gatekeeper프로젝트에는 여러 컴파일 종속성이 있습니다.

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

보시다시피 모듈 주위에 모인 많은 구성 요소(예: 탐색을 위한 Eureka 및 라우팅을 위한 리본)를 구성합니다.

enter image description here

시작할 때gatekeeper응용 프로그램, 기본값ZuulProxyAutoConfiguration구성을 적용하는 중입니다.리본 구성 클래스를 가져옵니다.

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

HttpClientRibbonConfiguration차례로, 이니셜라이즈RibbonLoadBalancingHttpClient당신이 본 오류 메시지에 책임이 있습니다.

그거RibbonLoadBalancingHttpClient부전용으로ZoneAwareLoadBalancer에서 오는 것.com.netflix.ribbon:ribbon-loadbalancer패키지:

기본적으로 Zuul은 리본에서 를 사용하여 로드 밸런싱을 수행합니다.이 알고리즘은 검색에서 사용할 수 있는 인스턴스의 라운드 로빈으로, 복원력을 위한 가용성 영역 성공 추적 기능을 제공합니다.로드 밸런서는 각 영역에 대한 통계를 유지하며 장애율이 구성 가능한 임계값을 초과하면 영역을 삭제합니다.

밸런서를 하려면 를 할 수 .NFLoadBalancerClassName 또는 getLoadBalancerClass()의법에 있는 DefaultClientChannelManager의 수업은 수을확합니다야해를 확장해야 하세요.DynamicServerListLoadBalancer.

이 Ribbon 및 밸런싱 을 위임하고 하고 있음을 증명한다고 설명합니다.gatekeeper프로젝트.

다른 로드 밸런서를 선택하지 않는 한 원래 답변을 선택해야 합니다.
도움이 되길 바랍니다.

언급URL : https://stackoverflow.com/questions/52161774/load-balancer-does-not-have-available-server-for-client-meeting

반응형