定义FeignClient
package com.easy.ansFeign.service; import com.easy.ansFeign.fallback.HelloServiceFallbackFactory; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @FeignClient(name = "ali-nacos-provider", fallbackFactory = HelloServiceFallbackFactory.class) public interface HelloService { /** * 调用服务提供方的输出接口. * * @param str 用户输入 * @return hello result */ @GetMapping("/hello/{str}") String hello(@PathVariable("str") String str); }定义fallback 工厂,获取异常
@Component public class HelloServiceFallbackFactory implements FallbackFactory<HelloServiceFallback> { @Override public HelloServiceFallback create(Throwable throwable) { return new HelloServiceFallback(throwable); } }定义具体的fallback 实现
public class HelloServiceFallback implements HelloService { private Throwable throwable; HelloServiceFallback(Throwable throwable) { this.throwable = throwable; } /** * 调用服务提供方的输出接口. * * @param str 用户输入 * @return */ @Override public String hello(String str) { return "服务调用失败,降级处理。异常信息:" + throwable.getMessage(); } }测试入口
@RestController public class TestController { @Autowired private HelloService helloService; @GetMapping("/hello-feign/{str}") public String feign(@PathVariable String str) { return helloService.hello(str); } } 使用示例 示例关联项目在Spring Cloud Alibaba(一) 如何使用nacos服务注册和发现基础上,我们新建了ali-nacos-sentinel-feign项目,并调用ali-nacos-provider项目用作该示例的服务提供方,有以下二个项目做测试。
ali-nacos-provider:服务提供者,服务名:ali-nacos-provider,端口:9000
ali-nacos-sentinel-feign:服务消费者,服务名:ali-nacos-sentinel-feign,端口:9102
首先要启动服务注册中心 nacos、ali-nacos-provider服务及ali-nacos-sentinel-feign服务
访问地址: :9102/hello-feign/yuntian
返回
我是服务提供者,见到你很高兴==>yuntian表示我们的服务成功调用到了
关闭ali-nacos-provider服务,访问: :9102/hello-feign/yuntian
返回
服务调用失败,降级处理。异常信息:com.netflix.client.ClientException: Load balancer does not have available server for client: ali-nacos-provider表示执行了我们预定的回调,服务成功降级了。
资料Spring Cloud Alibaba Sentinel 示例源码