Резервный метод не вызывается при сбое вызова остатка с помощью фиктивного клиента

Я пытаюсь реализовать резервный вариант с помощью клиента Feign, но безуспешно. Это самый простой код. Пожалуйста, найдите ниже.

Основной класс

@SpringBootApplication
@EnableDiscoveryClient
@RestController
@EnableFeignClients
public class EurekaClient1Application {

    @Autowired
    public DiscoveryClient discoveryClient;

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

    @Autowired 
    FeingInterface feingInterface;




    @GetMapping("/hi/{name}")
    public String test(@PathVariable String name)
    {
        String h = feingInterface.test(name);

        return h;
    }
}

Фейковый интерфейс

@FeignClient(name="client22",fallback=FallBack.class)
public interface FeingInterface {

    @GetMapping("/hiname/{name}")
    public String test(@PathVariable("name") String name);

}

резервный класс

@Component
class FallBack implements FeingInterface{

    @Override
    public String test(String name) {
        // TODO Auto-generated method stub
        return "fall back methord being called";
    }

}

Получение ошибки в оставшемся клиенте, но не из резервного метода

«отметка времени»: 1501950134118, «статус»: 500, «ошибка»: «внутренняя ошибка сервера», «исключение»: «java.lang.RuntimeException», «сообщение»: «com.netflix.client.ClientException: балансировщик нагрузки делает нет доступного сервера для клиента: client22",

Чтобы получить сообщение о методе резервного копирования, я передал идентификатор eureka client22, которого нет на сервере eureka. У меня статер в пом. Может ли кто-нибудь изучить это.


person rocky    schedule 05.08.2017    source источник
comment
Я обнаружил одну проблему git, связанную с этим, которая в основном говорит, что аннотированный интерфейс @FeignClient с резервным компонентом не может быть автоматически связан, потому что это не уникальный компонент, и эта проблема закрывается, теперь @FeignClient теперь является основным компонентом (github.com/spring-cloud/spring-cloud-netflix/issues/899 ). Но в данном случае то, чего мне не хватает, не найти.   -  person rocky    schedule 05.08.2017


Ответы (1)


Отказы на самом деле обрабатываются не самим Feign, а автоматическим выключателем. Итак, вам нужно поместить Hystrix (который является автоматическим выключателем Netflix) в путь к классам и включить его в файле application.yml следующим образом:

feign:
  hystrix:
    enabled: true

Если вы используете «cloud:spring-cloud-starter-openfeign» в файле build.gradle или pom.xml, Hystrix должен быть автоматически включен в ваш путь к классам.

person user7346048    schedule 04.12.2017
comment
Пожалуйста, добавьте объяснение вашего решения (как оно связано с вопросом) - person user7294900; 04.12.2017