로드 밸런서에 클라이언트: 회의에 사용할 수 있는 서버가 없습니다.
내가 서비스에 접속하려고 하는 동안meeting
Zuul 게이트웨이를 통해 Zuul은 해당 서비스로 요청을 전달할 수 없습니다.제가 직면한 오류는 다음과 같습니다.
- 넷플릭스.zuul.tbs.tbs.Zuul 예외:출고오류
- 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 및 라우팅을 위한 리본)를 구성합니다.
시작할 때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
'programing' 카테고리의 다른 글
Spring과 Spring MVC 프레임워크의 차이점은 무엇입니까? (0) | 2023.07.29 |
---|---|
루트 장치에서 실행 중인지 확인 (0) | 2023.07.29 |
#define에서 ##은 무엇을 의미합니까? (0) | 2023.07.24 |
문서의 배열 요소를 Mongoose 삭제하고 저장 (0) | 2023.07.24 |
"NUMBER"와 "NUMBER(*,0)"는 Oracle에서 동일합니까? (0) | 2023.07.24 |