com.disc.discl.discl을 클릭합니다.shared.discloss.discloss 。운송예외: 알려진 서버에서 요청을 실행할 수 없습니다.
마이크로서비스는 처음이라 링크(https://dzone.com/articles/advanced-microservices-security-with-spring-and-oa)에서 코드를 실행하려고 합니다.코드를 실행하기만 하면 다음 오류가 나타납니다.
무엇이 문제입니까?
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:111) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1030) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:944) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.DiscoveryClient.refreshRegistry(DiscoveryClient.java:1468) [eureka-client-1.4.12.jar:1.4.12]
at com.netflix.discovery.DiscoveryClient$CacheRefreshThread.run(DiscoveryClient.java:1435) [eureka-client-1.4.12.jar:1.4.12]
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [na:1.8.0_144]
at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.8.0_144]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_144]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_144]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_144]
2017-09-09 18:53:11.909 ERROR 16268 --- [tbeatExecutor-0] c.n.d.s.t.d.RedirectingEurekaHttpClient : Request execution error
시스템에 특별한 설치는 하지 않았습니다.무엇을 설치해야 하는지 알려주세요.
이 두 개의 애플리케이션을 application.properties에 추가해야 할 것 같습니다.하나만으론 부족해요.
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
이것은 기존의 서버에 접속하려고 하기 때문에 발생합니다.이 에러를 멈추려면 , 기존의 서버가 포토 8761(디폴트 포토)에 있는 Eureka 서버입니다.application.properties를 다음과 같이 갱신할 필요가 있습니다.
server.port=8761
eureka가 등록되지 않도록 하려면 application.properties에 추가합니다.
eureka.client.register-with-eureka=false
EurekaServer 가 유효하게 되어 있는 것을 확인합니다.예를 들어 스프링 부트를 사용하여 메인클래스에 다음과 같이 기술합니다.
@EnableEurekaServer
.properties 파일을 사용하여 솔루션을 제공하는 것을 양해해 주시기 바랍니다.그런데 .yml 설정은 크게 다르지 않습니다.
다른 마이크로 서비스인 Eureka 레지스트리 서버를 생성해야 합니다.SpringBoot 어플리케이션의 메인클래스로 @EnableEurekaServer 주석이 있어야 합니다.
다음으로 Eureka Client에서 다음과 같이 application.yml의 레지스트리 서버 URL을 언급해야 합니다.
spring:
application:
name: stock-service
server:
port: 8083
eureka:
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://localhost:8084/eureka/
instance:
hostname: localhost
여기서 defaultzone은 Eureka 레지스트리의 값을 유지합니다.
이러한 설정을 모두 완료하면, Eureka 레지스트리의 마이크로 서비스를 기동해, Eureka 클라이언트를 기동할 필요가 있습니다.레지스트리가 기동하면, 이 예외는 발생하지 않습니다.
이 메시지는 경고에 불과합니다.어플리케이션이 Eureka에 등록하려고 하는데 Eureka가 응답하지 않습니다.Eureka 인스턴스를 시작하거나 application.yml에 다음 항목을 추가하여 자동 등록을 해제할 수 있습니다.
eureka:
client:
register-with-eureka: false
제 Eureka 클라이언트, 즉 마이크로 서비스가 Eureka 서버에 등록하려고 할 때도 같은 오류가 발생했습니다.
클라이언트 등록 Eureka 서비스 등록 실패 알려진 서버에서 요청을 실행할 수 없습니다.
이 에러 메세지는, 다음의 2개의 가능성이 있습니다.
1) default Zone 주소가 올바르지 않습니다.철자가 틀렸거나: 뒤에 공백이 없습니다.
2) Eureka 서버에 실장된 스프링 보안에서는 모든 요구와 함께 유효한 CSRF 토큰이 전송되어야 합니다.Eureka 클라이언트는 일반적으로 유효한 Cross Site Request Wraphing(CSRF; 사이트 간 요청 위조) 토큰을 보유하지 않습니다.따라서 /eureka/** 엔드포인트에 대해 이 요건을 비활성화해야 합니다.
다음 코드 행으로 CSRF 토큰을 디세블로 한 후, Eureka 클라이언트는 자신을 Eureka 서버에 정상적으로 등록했습니다.
@EnableWebSecurity
class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().ignoringAntMatchers("/eureka/**");
super.configure(http);
}
}
또한 아래는 spring docs의 링크입니다.
저도 같은 오류가 발생했어요. ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.application.properties
철자를 입력했습니다.defaultZone
라고 썼어요. 는는썼썼썼썼default-zone
은 반드시 하지 be be be but but be be be be be butdefaultZone
.
앱 application.properties
:
eureka.client.service-url.defaultZone=http://localhost:8030/eureka/
호스트명과 포토는, 경우에 따라서 다를 수 있습니다.
종속성 버전:
- 스프링 부트:
2.5.6
- 봄철 클라우드:
2020.0.4
Eureka 서버 앱
application.yaml
server:
port: 8010
eureka:
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://localhost:8010/eureka
MyEurekaServerApplication.java
@EnableEurekaServer
@SpringBootApplication
public class MyEurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(MyEurekaServerApplication.class, args);
}
}
Eureka 클라이언트 앱
application.yaml
eureka:
client:
service-url:
defaultZone: http://localhost:8010/eureka
「 」를 사용하고 default-zone
defaultZone
Eureka Client App은 Eureka 서버에 등록할 때 예외를 발생시킵니다.
MyEurekaClientApplication.java
@EnableEurekaClient
@SpringBootApplication
public class MyEurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(MyEurekaClientApplication.class, args);
}
}
사용자 이름 및 비밀번호 없이 Eureka 서버가 도입 또는 실행되고 있는 경우 아래 속성을 사용하십시오.
spring.application.name=Hello-World
eureka.client.serviceUrl.defaultZone=http://eurekaserver:password@localhost:9100/eureka
server.port=9200
eureka.client.fetch-registry=true
Eureka 서버가 사용자 이름과 비밀번호로 전개/실행하고 있는 경우는, 다음의 속성을 사용해 주세요.
spring.application.name=Hello-World
eureka.client.serviceUrl.defaultZone=http://eurekaserverusername:eurekaserverpassword@localhost:9100/eureka
server.port=9200
eureka.client.fetch-registry=true
ZuulLoggingFiler.java에서 filterType()을 찾습니다.저도 같은 문제가 있었어요.그런데 필터가 무효로 돌아오는 걸 보고 '포스트'로 바꿨더니 작동하더라고요.
@Override
public String filterType() {
// TODO Auto-generated method stub
return "post";
}
"eureka.client.serviceUrl.defaultZone" 속성에 제공된 Eureka 서버의 URL 및 포트 번호를 확인합니다.
defaultZone 값에서 철자를 잘못 입력한 경우에도 동일한 오류가 발생합니다.예: 누군가가 euraka의 철자를 잘못 입력했습니다.다시 한 번 확인해 보세요.
defaultZone : http://localhost:8761/eureka
application.properties에 다음 행을 추가하면 해결되었습니다.
server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
첫 번째는 선택 사항입니다.
다른 2개의 속성은 Eureka 서버에 대해 "이 컨텍스트에서는 당신이 유일한 Eureka 서버입니다.다른 Eureka 서버를 찾으려 하지 마십시오."라고 통지하기 위해 사용됩니다.
이러한 사항을 언급하지 않으면 Eureka 서버는 다른 Eureka 서버를 검색하여 등록하려고 하며, 최종적으로 전송 예외를 발생시킵니다.
처음에 의존성을 다운로드 받아야 하기 때문에 인터넷에 접속한 후 동작합니다.
네임 서버에 접속할 마이크로 서비스에 다음 속성을 추가해 보십시오.
eureka.instance.hostname=localhost
위의 답변은 따로 떼어놓읍시다.이 서버를 아직 입수하지 못하셨을 수도 있습니다.@EnableEurekaServer
주석 프로그램이 올라갑니다. : )
언급URL : https://stackoverflow.com/questions/46131196/com-netflix-discovery-shared-transport-transportexception-cannot-execute-reques
'programing' 카테고리의 다른 글
React 컴포넌트와 React 요소를 검출하는 방법 (0) | 2023.02.28 |
---|---|
json gem 설치 방법 - gem 네이티브 확장을 빌드하지 못했습니다(mac 10.10). (0) | 2023.02.28 |
검색 엔진은 Angular를 어떻게 처리합니까?JS 어플리케이션 (0) | 2023.02.28 |
JavaScript용 IntelliJ IDEA를 사용하는 최적의 플러그인 및 프로젝트 (0) | 2023.02.28 |
제품에 변화가 있는지 확인하는 방법 (0) | 2023.02.28 |