0

我正在尝试通过使用 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 id。我在 pom 中有 stater-feign。有人可以调查一下吗。

4

1 回答 1

6

回退实际上不是由 Feign 自己处理的,而是由断路器处理的。因此,您需要将 Hystrix(它是 Netflix 断路器)放在您的类路径中,并在 application.yml 文件中启用它,如下所示:

feign:
  hystrix:
    enabled: true

如果你在 build.gradle 或 pom.xml 文件中使用 'cloud:spring-cloud-starter-openfeign',Hystrix 应该会自动出现在你的类路径中。

于 2017-12-04T13:49:33.437 回答