Spring Cloud Alibaba(三)Sentinel之熔断降级 (2)

定义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 示例源码

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjdsp.html