com.netflix.discovery.shared.transport.TransportException: невозможно выполнить запрос на любом известном сервере

Я очень новичок в микросервисах и пытаюсь запустить код из ссылки: 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

Я не установил ничего особенного в систему. Пожалуйста, дайте мне знать, что мне нужно для установки?

enter image description here

Ответ 1

Я считаю, что я должен добавить эти два приложения в appllication.properties, он может работать. Только одного недостаточно.

eureka.client.register-with-eureka=false

eureka.client.fetch-registry=false

Ответ 2

Это конкретное сообщение - просто предупреждение. Ваша заявка пытается зарегистрироваться в Eureka, но Eureka не отвечает. Вы можете либо запустить экземпляр Eureka, либо отключить автоматическую регистрацию, добавив следующее к вашему application.yml.

eureka:
  client:
    register-with-eureka: false

Ответ 3

Это происходит потому, что он пытается подключиться к любому известному серверу, поэтому, чтобы остановить эту ошибку, известный сервер является сервером eureka на порту 8761, который является его портом по умолчанию, вам придется обновить application.properties следующим

server.port=8761

Чтобы избежать регистрации eureka, вы добавляете это в application.properties

eureka.client.register-with-eureka=false

Убедитесь, что EurekaServer включен, например, используя весеннюю загрузку, вы пишете ниже в основном классе.

@EnableEurekaServer

Пожалуйста, извините меня за предоставление решения, используя файл.properties, но это то, с чем я работаю, но конфигурации.yml не должны быть слишком разными.

Ответ 4

Вам необходимо создать Eureka Registry Server, который является еще одним микросервисом. Это основной класс для приложения SpringBoot, должен иметь аннотацию @EnableEurekaServer.

Затем в вашем Eureka Client вам нужно будет указать URL-адрес сервера реестра в appliation.yml, как показано ниже:

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 Registry, а затем вы можете получить клиента Eureka. Как только ваш реестр завершен, вы не столкнетесь с этим исключением.

Ответ 5

Убедитесь, что ваш ленточный клиент верен

package com.in28minutes.microservices.currencyconversionservice;

import org.springframework.cloud.netflix.ribbon.RibbonClient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name="curreenter code herency-exchange-service")
@RibbonClient(name="currency-exchange-service") 
public interface CurrencyExchangeServiceProxy { 
    @GetMapping("/currency-exchange/from/{from}/to/{to}")
    public CurrencyConversionBean retrieveExchangeValue
        (@PathVariable("from") String from, @PathVariable("to") String to); //mention correct pathvariables
}

Ответ 6

Ищите filterType() в ZuulLoggingFiler.java. У меня такая же проблема. Потом я увидел, что мой фильтр возвращает ноль. поэтому я изменил его на "пост", и это сработало.

@Override
public String filterType() {
    // TODO Auto-generated method stub
    return "post";
}