5.2.3 代码介绍
文章插图
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 注册中心:文章插图
feign远程调用:
文章插图
6、Feign的服务降级与熔断6.1 服务降级(服务消费端)6.1.1 依赖由于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 不添加服务降级时文章插图
6.1.4.2 添加服务降级后
文章插图
6.2 服务熔断(服务提供端)6.2.1 依赖
<!--导入Hystrix依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId></dependency>
文章插图
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 //开启熔断服务 旧的开启服务熔断注解: @EnableCircuitBreaker
6.2.4 测试6.2.4.1 没有服务降级,也没有服务熔断 时直接返回错误;文章插图
6.2.4.2 有服务降级,没有服务熔断 时触发服务降级;
推荐阅读
- 焊工证个人信息查询入口 查询入口
- 二 京东云开发者| Redis数据结构-List、Hash、Set及Sorted Set的结构实现
- 二、python基本数据类型
- 二 【SSM】学习笔记——SpringMVC入门
- 原神片剂深研第二关怎么通关
- 四十六 SpringCloud微服务实战——搭建企业级开发框架:【移动开发】整合uni-app搭建移动端快速开发框架-环境搭建
- 二 『现学现忘』Git分支 — 41、分支基本操作
- 原神游音旅梦二周年活动内容介绍
- 二进制安装Dokcer
- SpringCloud整合分布式事务Seata 1.4.1 支持微服务全局异常拦截