二 SpringCloud - Eureka注册中心,feign远程调用,hystrix降级和熔断( 二 )

5.2.3 代码介绍

二 SpringCloud - Eureka注册中心,feign远程调用,hystrix降级和熔断

文章插图
5.2.3.1 业务层接口//指定服务名@FeignClient(value = "https://www.huyubaike.com/biancheng/edocmall-server")public interface WebEntryService {//基于feign 远程调用edoc-server服务端提供的查询文档详情接口@GetMapping("/entry") //必须跟远程请求一直EdocEntryVO invokeEntryServiceUserFeign(@RequestParam("id") Integer id); //必须写 @RequestParam("id")// 注意 一点更要写 @RequestParam("id") 里面的参数必须写}5.2.3.1 控制层之直接调用接口@RestControllerpublic class WebEntryController {@Autowiredprivate WebEntryService webEntryService;// 根据文档编号,获取文档详情@GetMapping("/entryById")public RequestResult<EdocEntryVO> entryDetail(Integer id){log.info("------ 根据文档编号:{},获取文档详情 ------",id);//基于feign 远程调用服务端接口 , 获取文档详情EdocEntryVO edocEntryVO = webEntryService.invokeEntryServiceUserFeign(id);return ResultBuildUtil.success(edocEntryVO);}}5.2.4 主启动类上的注解@EnableEurekaClient// 开启 eureka 服务注册,将此服务注册到 eureka中@EnableFeignClients//开启 feign 远程调用服务5.2.5 请求测试eureka 注册中心:
二 SpringCloud - Eureka注册中心,feign远程调用,hystrix降级和熔断

文章插图
feign远程调用:
二 SpringCloud - Eureka注册中心,feign远程调用,hystrix降级和熔断

文章插图
6、Feign的服务降级与熔断6.1 服务降级(服务消费端)6.1.1 依赖由于feign中有hystrix的依赖 , 所以不用单独添加;
二 SpringCloud - Eureka注册中心,feign远程调用,hystrix降级和熔断

文章插图
6.1.2 接口指定服务降级后的实现类@FeignClient(value = "https://www.huyubaike.com/biancheng/edocmall-server",fallback = WebEntryServiceImpl.class) //fallback 指定调用失败后 降级调用的数据public interface WebEntryService {......}6.1.3 实现类 , 具体降级服务操作@Servicepublic class WebEntryServiceImpl implements WebEntryService {@Overridepublic EdocEntryVO invokeEntryServiceUserFeign(Integer id) {//此方法,就是regn远程调用,触发服务剪辑的默认实现,正常请求不会调用//只用远程 feign调用失败,才会调用EdocEntryVO edocEntryVO = new EdocEntryVO();edocEntryVO.setId(999);edocEntryVO.setCid(0);edocEntryVO.setTitle("触发熔断服务降级");edocEntryVO.setSummary("当feign远程调用接口失败,默的默认实现");edocEntryVO.setUploadUser("feign-hystrix");edocEntryVO.setCreateDate(new Date());return edocEntryVO;}6.1.4 测试6.1.4.1 不添加服务降级时
二 SpringCloud - Eureka注册中心,feign远程调用,hystrix降级和熔断

文章插图
6.1.4.2 添加服务降级后
二 SpringCloud - Eureka注册中心,feign远程调用,hystrix降级和熔断

文章插图
6.2 服务熔断(服务提供端)6.2.1 依赖<!--导入Hystrix依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId></dependency>
二 SpringCloud - Eureka注册中心,feign远程调用,hystrix降级和熔断

文章插图
6.2.2 熔断 备选方法 和 熔断触发条件@Slf4j@RestControllerpublic class EntryController {@Autowiredprivate EntryService entryService;//根据 id 查询文档详情@GetMapping("/entry")@HystrixCommand(fallbackMethod = "fallbackStoryDetail")//指定 服务熔断后的备选方法public EdocEntryVO entryDetail(@RequestParam Integer id){log.info("------ 根据文档编号:{},获取文档详情 ------",id);EdocEntryVO edocEntry = entryService.getEdocEntryById(id);if (edocEntry == null){//抛出异常 , 触发 熔断 备选方法throw new RuntimeException("id为:"+id+"的用户不存在,触发服务熔断");}return edocEntry;}// 根据 id 查询文档详情 方法 服务熔断后的备选方案public EdocEntryVO fallbackStoryDetail(@RequestParam Integer id){//此方法,只用服务熔断时,才会被调用EdocEntryVO edocEntryVO = new EdocEntryVO();edocEntryVO.setId(999);edocEntryVO.setCid(0);edocEntryVO.setTitle("根据 id 查询文档详情 方法 服务熔断后的备选方案");edocEntryVO.setSummary("当根据id 查询不到具体用户信息时,就会触发");edocEntryVO.setUploadUser("hystrix");edocEntryVO.setCreateDate(new Date());return edocEntryVO;}}6.2.3 主启动类上的注解@EnableHystrix //开启熔断服务 旧的开启服务熔断注解: @EnableCircuitBreaker6.2.4 测试6.2.4.1 没有服务降级,也没有服务熔断 时直接返回错误;
二 SpringCloud - Eureka注册中心,feign远程调用,hystrix降级和熔断

文章插图
6.2.4.2 有服务降级,没有服务熔断 时触发服务降级;
二 SpringCloud - Eureka注册中心,feign远程调用,hystrix降级和熔断

推荐阅读