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、多人协调编程体验统一了;
那我们赶紧就来测试一下吧 , 启动好内容中心和用户中心服务 , 测试接口 , 哎?怎么报错了[惊呆] , 报错信息如下:
feign:client:config:#全局配置default:loggerLevel:fulllogging:level:#feign的日志级别必须建立在debug上 , 否则无效com.seven.contentcenter.feignclient.UserCenterFeignClient:debugfeign支持的配置项有很多 , 作为暖男的阿七又给大家整理好了 。 如果小伙伴在实际开发中遇到了 , 可以参考着使用 。
(1)、使用Apache的HTTPClient为例 , 来为Feign配置连接池第一步:加依赖
io.github.openfeignfeign-httpclient第二步:写配置
feign:httpclient:#让feign使用ApacheHTTPClient做请求 , 而不是默认的urlConnectionenabled:true#feign最大连接数max-connections:200#feign单个路径的最大连接数max-connections-per-route:50(2)、使用okhttp为例 , 来为Feign配置连接池第一步:加依赖
io.github.openfeignfeign-okhttp10.1.0第二步:写配置
feign:httpclient:#feign最大连接数max-connections:200#feign单个路径的最大连接数max-connections-per-route:50okhttp:#让feign使用Apacheokhttp做请求 , 而不是默认的urlConnectionenabled:true性能优化2----设置合理的日志级别在生产环境 , 需要打印feign的日志 , 使用basic级别就ok了 , 强烈不建议使用full 。 打印日志太多 , 消耗feign的性能 。
好了 , feign的分享就到这里 , 最后 , 我画了一张微服务调用图献给大家 , 供小伙伴思考学习 。
我们下一篇将学习服务容错–sentinel , 欢迎各位小伙伴关注我 , 喜欢这篇文章记得点赞哦 。 [比心][比心][比心]
推荐阅读
- 小龙虾|三农探析:池塘养殖小龙虾如何高产?高产养殖技术全解析
- 菜籽饼|菜籽饼被誉为果园之宝,但用错了烧苗烧根,果农如何来使用?
- 水产养殖|生态水产养殖如何提高鱼病的预防工作?大疆渔业这样建议
- 教你自制广式月饼
- 新冠疫苗|好消息!我国又一个新冠疫苗获批紧急使用
- 瘦肉精|如何避开 315曝光的瘦肉精问题肉?
- 美国_军事|那个帮美国破解北斗卫星的清华才女高杏欣,13年过去了,近况如何
- 花菜有人焯水,有人直接下锅炒,都错了,看饭店大厨是如何做的
- 疫苗|全球抗疫又添“新利器”!安徽重组新型新冠疫苗获批紧急使用
- 如何晚上发面早上蒸?教你用冷藏发酵,一学就会,馒头包子特好吃
