幸福一箩筐|Feign如何使用?看看这篇文章吧

大家好 , 我是阿七 。
上一篇的文章《负载均衡Ribbon》已经带大家学习过了 , 但是代码还是存在一些问题的 , 那本篇我们通过学习feign , 来重构我们的代码 。
feign是什么?feign是Netflix开源的声明式的http客户端 。 另外 , 摘自官网的一句话:
Feignisadeclarative(声明式)webserviceclient.Itmakeswritingwebserviceclientseasier.TouseFeigncreateaninterfaceandannotateit.Ithaspluggable(可插拔)annotationsupportincludingFeignannotationsandJAX-RSannotations.Feignalsosupportspluggableencodersanddecoders.SpringCloudaddssupportforSpringMVCannotationsandforusingthesameHttpMessageConvertersusedbydefaultinSpringWeb.SpringCloudintegrates(集成)RibbonandEurekatoprovidealoadbalancedhttpclientwhenusingFeign.
让我们直接coding起来吧 。 阿七会带着大家一步一步深入了解feign 。
一、整合feign依然是我们的三步骤第一步加依赖:
org.springframework.cloudspring-cloud-starter-openfeign第二步加注解:启动类上加@EnableFeignClients注解
@MapperScan("com.seven")@SpringBootApplication@EnableFeignClientspublicclassContentCenterApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ContentCenterApplication.class,args);}@Bean@LoadBalancedpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}第三步写配置:暂时没有配置 。
第四步修改代码:接下来我们就开始修改代码 , 首先我们创建一个包feignclient , 编写一个接口UserCenterFeignClient , 代码如下:
//name="user-center"表示调用的服务名称@FeignClient(name="user-center")publicinterfaceUserCenterFeignClient{/***根据ID查询用户信息 , feign会自动帮我们转成*http://user-center/users/{id}**@paramid*@return*/@GetMapping("/users/{id}")UserDTOfindById(@PathVariable("id")Integerid);}另外 , 我们修改内容中心调取用户中心的代码 , 我把之前的方法也贴出来供大家比较:before–使用ribbon调用
@Service@Slf4jpublicclassShareService{@ResourceprivateShareMappershareMapper;@ResourceprivateRestTemplaterestTemplatepublicShareDTOfindById(Integerid){Shareshare=this.shareMapper.selectByPrimaryKey(id);IntegeruserId=share.getUserId();//ribbon方式:根据userId查询用户信息UserDTOuserDTO=this.restTemplate.getForObject("http://user-center/users/{userId}",UserDTO.class,userId);ShareDTOshareDTO=newShareDTO();BeanUtils.copyProperties(share,shareDTO);shareDTO.setWxNickname(userDTO.getWxNickname());returnshareDTO;}}now–使用feign调用
@Service@Slf4jpublicclassShareService{@ResourceprivateShareMappershareMapper;@ResourceprivateUserCenterFeignClientuserCenterFeignClient;publicShareDTOfindById(Integerid){Shareshare=this.shareMapper.selectByPrimaryKey(id);IntegeruserId=share.getUserId();//代码演进--feign方式:直接使用feignclient来调用UserDTOuserDTO=userCenterFeignClient.findById(userId);ShareDTOshareDTO=newShareDTO();BeanUtils.copyProperties(share,shareDTO);shareDTO.setWxNickname(userDTO.getWxNickname());returnshareDTO;}}这样一比较 , 是不是感觉我们的代码瞬间看着舒服了有木有 。 阿七觉得 , 经过一番修改 , 我们的代码具有以下好处:1、可读性强了;2、不用处理复杂的URL维护问题;3、多人协调编程体验统一了;
那我们赶紧就来测试一下吧 , 启动好内容中心和用户中心服务 , 测试接口 , 哎?怎么报错了[惊呆] , 报错信息如下: