Feign详解与实例

基本介绍

        Feign是一种负载均衡的HTTP客户端, 使用Feign调用API就像调用本地方法一样,从避免了调用目标微服务时,需要不断的解析/封装json 数据的繁琐。Feign集成了Ribbon。Ribbon+eureka是面向微服务编程,而Feign是面向接口编程。

        Fegin是一个声明似的web服务客户端,它使得编写web服务客户端变得更加容易。使用Fegin创建一个接口并对它进行注解。它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageConverters, Spring Cloud 集成 Ribbon 和 Eureka 提供的负载均衡的HTTP客户端 Feign。

Feign能干什么

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

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

SpringCloud之Feign入门实例

1、添加依赖以及主程序

   <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId></dependency>
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages= {"com.atguigu.springcloud"})
@ComponentScan("com.atguigu.springcloud")
public class DeptConsumer80_Feign_App{public static void main(String[] args){SpringApplication.run(DeptConsumer80_Feign_App.class, args);}
}

 2、接口+注解(一般在公共接口中定义,方面其他微服务调用)

@FeignClient(value = "MICROSERVICECLOUD-DEPT")  //该接口对应于应用id为MICROSERVICECLOUD-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);
}

应用id为MICROSERVICECLOUD-DEPT的微服务就实现该接口功能。

3、Web层服务调用

以前使用Ribbon+Eureka时:

@RestController
public class DeptController_Consumer{private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";@Autowiredprivate RestTemplate restTemplate;@RequestMapping(value = "/consumer/dept/add")public boolean add(Dept dept){return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);}@RequestMapping(value = "/consumer/dept/get/{id}")public Dept get(@PathVariable("id") Long id){return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class);}@SuppressWarnings("unchecked")@RequestMapping(value = "/consumer/dept/list")public List<Dept> list(){return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);}
}

现在使用Feign,面向接口编程:

@RestController
public class DeptController_Consumer{@Autowiredprivate DeptClientService service;@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);}
}

Ribbon和Feign都是用于调用其他服务的,不过方式不同

目前,在Spring cloud 中服务之间通过restful方式调用有两种方式 
    - restTemplate+Ribbon 
    - feign

  • 1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
  • 2.服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
  • 3.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

 

Feign的自带断路器

@FeignClient(value = "YunCai-SearchServer", fallback=ServiceHystrix.class)
public interface SchedualServiceHi {@RequestMapping(value = "/luke/itemsearch",method = RequestMethod.GET)ResponseMap sayHiFromClientOne(@RequestParam(value = "start") Integer start,@RequestParam(value = "rows") Integer rows,@RequestParam(value = "tenantId") Integer tenantId,@RequestParam(value = "status") Integer status,@RequestParam(value = "key") String key);
}
@Component
public class ServiceHystrix implements SchedualServiceHi {@Overridepublic ResponseMap sayHiFromClientOne(Integer start, Integer rows, Integer tenantId, Integer status, String key) {SearchResult result = new SearchResult(0, new ArrayList<>(Arrays.asList(1L,2L,3L)));return new ResponseMap(false, "111", 506, result);}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/251664.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

FeignClient

FeignClient的调用 注意&#xff1a; 依赖可能会出现冲突&#xff0c;请根据spring-cloud版本选择并修改 1. 引入依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artif…

Feign的介绍

Feign是springcloud里面的一个功能组件&#xff0c;那么它是实现一个什么功能呢&#xff1f; 首先我们可以先从字面意思上去理解一下它&#xff0c;Feign&#xff0c;英文翻译过来就是伪装的意思&#xff0c;实际上它的功能也是和伪装相关的&#xff0c;在我们之前在客户端配置…

@FeignClient使用详解

FeignClient标签的常用属性如下&#xff1a; name&#xff1a;指定FeignClient的名称&#xff0c;如果项目使用了Ribbon&#xff0c;name属性会作为微服务的名称&#xff0c;用于服务发现url: url一般用于调试&#xff0c;可以手动指定FeignClient调用的地址decode404:当发生h…

Feign详解

一. Feign概述 Feign是Spring Cloud提供的声明式、模板化的HTTP客户端&#xff0c; 它使得调用远程服务就像调用本地服务一样简单&#xff0c;只需要创建一个接口并添加一个注解即可。 Spring Cloud集成Feign并对其进行了增强&#xff0c;使Feign支持了Spring MVC注解&#x…

Feign(简介和使用)

1. Feign介绍 通过RestTemplate调用其它服务的API时&#xff0c;所需要的参数须在请求的URL中进行拼接&#xff0c;如果参数少的话或许我们还可以忍受&#xff0c;一旦有多个参数的话&#xff0c;这时拼接请求字符串就会效率低下 Feign是一个声明式的Web Service客户端&#…

什么是Feign?

服务间调用介绍 现有的服务调用方式 利用拼接的方式。 虽然上面有的用不错就很好了 Feign解决了什么问题 Feign的调用方式 Feign体系架构解析-武装到牙齿 上一节我们了解了feign的主要功能&#xff0c;它就像一个自拍杆一样&#xff0c;方便了Eureka的远程调用。可是怎么看…

简单理解Feign的原理与使用

文章目录 SpringCloud 总架构图一、简介1.1、负载均衡的概念2.2、Feign概念 二、入门案例2.1、导入依赖2.2、Feign的客户端2.3、调用Feign2.4、开启Feign功能2.5、启动测试2.6、Feign实现原理简单分析 三、负载均衡(Ribbon)四、熔断器支持五、请求压缩和响应压缩六、配置日志级…

Feign基本使用(超详细)

目录 一、Feign概述 二、Feign入门 1.创建服务提供者(provider) 2.创建feign接口 3、创建服务消费者(consumer) 三、Feign 原理 四、Feign优化 1、开启feign日志 2、feign超时问题 3、http连接池 4、gzip压缩 前言 当我们通过RestTemplate调用其它服务的API时&#xff0c;所…

中外黑客两则

外国一则&#xff1a;丹尼斯麦卡利斯泰尔里奇。挑选他的原因&#xff1a;帅。 &#xff08;英语&#xff1a;Dennis MacAlistair Ritchie&#xff1b;1941年9月9日&#xff0d;2011年10月12日[3][4]&#xff09;&#xff0c;著名的美国计算机科学家&#xff0c;对C语言和其他编…

git使用X篇_2_Git全套教程IDEA版(git、GitHub、Gitee码云、搭建公司内部GitLab、与IDEA集成等内容)

本文是根据以下视频及网上总结进行更新后的介绍git使用的博文。包含了git、GitHub、Gitee码云、搭建公司内部GitLab、与IDEA集成等内容。 笔记来源&#xff1a;【尚硅谷】5h打通Git全套教程IDEA版&#xff08;涵盖GitHub\Gitee码云\GitLab&#xff09; 文章目录 初识 Git0、内容…

Axure原型模板、元件库、组件库

在产品设计中&#xff0c;随时会使用到相似场景&#xff0c;每次都反复绘制耗时耗力。 若使用通用模板即可快速提高设计效率。 下面给大家提供一个登录多种验证系统框架模板&#xff0c;可快速修改使用。 预览链接&#xff1a; Axure高保真原型设计、Axure元件库、产品交互…

AXURE9最全的WEB设计元件库(分享版).rplib

Axure9常用到的WEB设计元件库&#xff0c;在Axure点击号即可导入元件库使用&#xff0c;或者打开Axure R9安装目录&#xff0c;进入DefaultSettings\Libraries&#xff0c;复制资源到此目录并重启Axure软件即可看到。 文件&#xff1a;590m.com/f/25127180-481124286-469239 &…

Axure移动端通用元件库rplib格式包含安卓、苹果各种主流手机、平板线框图元件库、IOS系统图标、人物图标、导航和分页、表格元素、各种小图标、移动元件库、axure元件库、axure原型

Axure移动端通用元件库rplib格式包含安卓、苹果各种主流手机、平板线框图元件库、IOS系统图标、人物图标、导航和分页、表格元素、各种小图标等 移动端通用元件库、app通用元件库、数据展示、操作反馈、通用模板、数据录入、列表页、表单页、详情页、通用版布局、移动端手机模…

Axure导入元件库和使用

下载元件库 vant 元件库下载: Vant - Mobile UI Components built on Vue element UI 元件库下载:https://element.eleme.cn/#/zh-CN/resource 以vant示例&#xff0c;下载完成后解压 我们看到有.rp和.rplib格式的文件 rp文件可以理解为一个别人设计好的原型作品。 rplib是原…

【Axure9.0原型实战(一)】Axure9.0的元件库的使用、导入、制作、路径等操作方法与技巧(附Axure元件库大全)

Axure9.0的元件库 文章目录 Axure9.0的元件库Axure9.0的元件库大全1.windows系统加载元件库2.MAC系统加载元件库3.新加入一些元件库4.自己建立元件库 Axure9.0的元件库大全 链接&#xff1a;https://pan.baidu.com/s/18VWM9R1qgFAXXz8Xooq4-A 提取码&#xff1a;u2gx 1.windo…

Axure RP9 的元件库

Axure的元件库 1.加载元件库 可以通过导入一些现有的元件库&#xff0c;来提高绘制的效率及美观性。 &#xff08;1&#xff09;windows系统&#xff1a; 将准备好的元件库复制到Axure 根目录下-【DefaultSettings】-【Libraries】中&#xff1b;移动成功后&#xff0c;重启…

嵌入式linux音乐电子相册制作软件,ApowerShow – 超级轻便的在线照片音乐视频制作软件...

有没有什么好用的照片视频制作软件呢&#xff1f;我大概对比了一下国内的其他软件&#xff0c;发现转场效果很多&#xff0c;但是需要自己去添加。它们的界面感觉有点繁琐&#xff0c;不是那么简洁。 其实除了使用国内的照片视频制作软件&#xff0c;你还可以使用ApowerShow。它…

html立体音乐相册源码,印记工坊立体音乐相册 v 1.8 官方版|印记工坊立体音乐相册官方版|印记工坊立体音乐相册电脑版_最火软件站...

印记工坊立体音乐相册包含多种多样的模板可以供用户使用&#xff0c;制作多种样式的电子相册,是一款傻瓜式视频音乐相册制作工具&#xff0c;及时是毫无制作经验的用户也能创作出精美的相册。最火软件站提供下载。 软件特色 故事视频制作 MV展示视频相册 时间轴视频制作 时光轴…

html动感音乐相册,动感音乐相册

动感音乐相册app是一款超级好用的音乐相册软件&#xff0c;这款软件上的功能丰富&#xff0c;能够帮助用户进行照片编辑&#xff0c;制作幻灯片等等&#xff0c;还能在线选择背景音乐进行添加&#xff0c;让相册每次打开都有不一样的感觉&#xff0c;喜欢的朋友快来下载吧。 动…

视频删了怎么恢复

视频无处不在&#xff0c;记录着各种有意义的画面&#xff0c;那么一旦重要的视频文件删除了该怎么恢复呢?甲驭科技数据恢复小编教您如何操作恢复。 目前视频的录制主要是各种相机摄像机录制或者手机录制的&#xff0c;这里以相机摄像机录制视频恢复为例&#xff0c;讲述如何快…