当前位置:首页 > 服务端 > SpringCloud入门最佳实践(六)Feign 负载均衡

SpringCloud入门最佳实践(六)Feign 负载均衡

2022年11月10日 10:32:48服务端6

介绍

是什么

官网解释:
http://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign

Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单,
它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。
Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
SpringCloud入门最佳实践(六)Feign 负载均衡 _ JavaClub全栈架构师技术笔记

Feign是一个声明式的Web服务客户端,使得编写Web服务客户端变得非常容易, 只需要创建一个接口,然后在上面添加注解即可。
参考官网:https://github.com/OpenFeign/feign

Feign能干什么
Feign旨在使编写Java Http客户端变得更容易。
前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。

Feign 集成了 Ribbon 利用 Ribbon 维护了 IcodeCloud-Dept 的服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用

改造

  • 参考 icodecloud-consumer-dept-80

  • 新建 icodecloud-consumer-dept-feign

    修改主启动类名称为:DeptConsumer8000_Feign_App

  • 修改 icodecloud-consumer-dept8000-feign工程pom.xml修改,主要添加对feign的支持

      <!-- feign相关 -->
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-feign</artifactId>
      </dependency>
    
  • 修改 icodecloud-api工程

    • POM 新增

        <dependency>
         <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-feign</artifactId>
         </dependency>
      
    • 新建 DeptClientService 接口并新增注解 @FeignClient

         @FeignClient(value = "ICODECLOUD-DEPT")
         public interface DeptClientService {
             @RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
             public Dept get(@PathVariable("id") long id);
         
             @RequestMapping(value = "/dept/list", method = RequestMethod.GET)
             public List<Dept> list();
         
             @RequestMapping(value = "/dept/add", method = RequestMethod.POST)
             public boolean add(Dept dept);
         }
      
    • mvn clean and mvn install

    • icodecloud-consumer-dept-8000-feign工程修改 Controller,添加上一步新建的 DeptClientService 接口

         @RestController
         public class DeptController_Consumer_Feign {
         
             @Autowired
             private DeptClientService service = null;
         
             @RequestMapping(value = "/consumer/dept/get/{id}")
             public Dept get(@PathVariable("id") Long id) {
                 return this.service.get(id);
             }
         
             @RequestMapping(value = "/consumer/dept/list")
             public List<Dept> list() {
                 return this.service.list();
             }
         
             @RequestMapping(value = "/consumer/dept/add")
             public Object add(Dept dept) {
                 return this.service.add(dept);
             }
         }
      
    • icodecloud-consumer-dept-feign工程修改主启动类

         @SpringBootApplication
         @EnableEurekaClient
         @EnableFeignClients(basePackages = {"com.icode.cloud"})
         @ComponentScan("com.icode.cloud")
         public class DeptConsumer8000_Feign_App {
             public static void main(String[] args) {
                 SpringApplication.run(DeptConsumer8000_Feign_App.class, args);
             }
         }
      
    • 测试

    • 总结

    面向接口编程
    Feign通过接口的方法调用Rest服务(之前是Ribbon+RestTemplate),
    该请求发送给Eureka服务器(http://ICODECLOUD-DEPT/dept/list),
    通过Feign直接找到服务接口,由于在进行服务调用的时候融合了Ribbon技术,所以也支持负载均衡作用。

    • 结构图
      SpringCloud入门最佳实践(六)Feign 负载均衡 _ JavaClub全栈架构师技术笔记

作者:代码量不够
来源链接:https://blog.csdn.net/qq_33746789/article/details/82822920

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/69274.html

分享给朋友:

“SpringCloud入门最佳实践(六)Feign 负载均衡” 的相关文章

SpringBoot之整合Mybatis篇

SpringBoot之整合Mybatis篇

开头语 啪嚓,醒木一拍(咳咳) ,上回书我们说到:SpringBoot的简单搭建,也就是SpringBoot的搭建流程,简单的将项目进行启动,本次,我们简单的把SpringBoot与持久层框架Mybatis进行整合,接下来,我们开始。 Mybatis名词解释   &...

SpringBoot+Mybatis框架整合Shiro权限管理

SpringBoot+Mybatis框架整合Shiro权限管理

一、前言 ​ 之前曾分享过一个关于shiro的认证原理的文章,分享了一下shiro的认证流程与shiro中的名词解释,其实shiro作为一款轻量级框架,被应用在各种中小型及大型企业的登录认证和用户授权的模块,有小伙伴称,在用SpringBoot框架,之前用过xml方式进行配置shiro框架,...

前后端分离,SpringBoot如何实现验证码操作

前后端分离,SpringBoot如何实现验证码操作

验证码的功能是防止非法用户恶意去访问登录接口而设置的一个功能,今天我们就来看看在前后端分离的项目中,SpringBoot是如何提供服务的。SpringBoot版本本文基于的Spring Boot的版本是2.6.7 。引入依赖captcha一款超简单的验证码生成,还挺好玩的.还有中文验证码,动态验证码...

SpringCloud基本原理

SpringCloud基本原理 在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统。其它几章的介绍是基于SpringCloud基本原理...

SpringCloud系列之版本选择

SpringCloud系列之版本选择

SpringBoot版本   进入Spring官网,查看当前SpringBoot版本:   当前最新版本是2.5.4 GA,如果单纯使用SpringBoot框架,那么选择2.5.4 GA就行。 GA即General Av...

Springboot 整合 Mybatis 的完整 Web 案例

Springboot 整合 Mybatis 的完整 Web 案例

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 推荐一本书《 腾讯传》。 新年第一篇 Springboot 技术文...

SpringBoot 整合mapstruct|赶紧丢掉BeanUtils吧

SpringBoot 整合mapstruct|赶紧丢掉BeanUtils吧

代码已经上传到码云:https://gitee.com/lezaiclub/springboot-hyper-integration.git,欢迎白嫖 前言 在项目中,如果我们要遵循分层领域模型规约: 话,肯定避免不了在DTO、VO、BO、A...

Spring Cloud 学习推荐

学习 Spring Boot Spring tutorials | Java Web Development, Spring Cloud Programming tutorials Spring Boot为您提供了Spring Framewo...

解决spring+shiro cacheManager 登录报错

一、项目启动,登录报错 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' defined in class path resource...

spring cloud 报错Error creating bean with name 'hystrixCommandAspect' ,解决方案

spring cloud 报错Error creating bean with name 'hystrixCommandAspect' ,解决方案   spring cloud 升级到最新版 后,报错: org.springframew...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。