当前位置:首页 > 技术分析 > 正文内容

SpringCloud之Feign,OpenFeign讲解

ruisui883个月前 (02-03)技术分析18

1 Feign

1.1 定义

1.1.1 简介

Feign是一个声明式的Web Service客户端,通过声明RESTful请求客户端
Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端

Java当中常见的Http客户端有很多,除了Feign,类似的还有Apache 的 HttpClient 以及OKHttp3,还有SpringBoot自带的RestTemplate这些都是Java当中常用的HTTP 请求工具

微服务直接调用使用RestTemplate进行远程调用,非常方便,那么有了RestTemplate为什么还要有Feign,因为RestTemplate有一个致命的问题:硬编码。
点击了解Spring之RestTemplate
在 RestTemplate 调用中,我们每个调用远程接口的方法,都将远程接口对应的 ip、端口,或 service-id 硬编码到了 URL 中,如果远程接口的 ip、端口、service-id 有修改的话,需要将所有的调用都修改一遍,这样难免会出现漏改、错改等问题,且代码不便于维护。为了解决这个问题,Netflix 推出了 Feign 来统一管理远程调用

1.1.2 OpenFeign和Feign的区别

Feign:

OpenFeign:

OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解,如@RequesMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

1.1.3 属性介绍

@FeignClient标签的常用属性如下:

1.1.4 原理解析

Feign调用步骤:

  • 程序启动时,扫描所有的@FeignClient注解
  • 当接口方法被调用时,通过JDK代理来生成RequestTemplate模板
  • 根据RequestTemplate模板生成Http请求的Request对象
  • Request对象交给Client去处理,其中Client的网络请求框架可以是HttpURLConnection、HttpClient、OKHttp
  • 最后client封装成LoadBaLanceClient,结合ribbon负载均衡地发起调用

1.2 OpenFeign准备工作

1.2.1 引入依赖

在Spring Cloud项目中引入Feign依赖,但是因为feign底层使用了ribbon作为负载均衡的客户端,而ribbon的负载均衡也是依赖于eureka获得各个服务的地址,所以要引入eureka-client

1.2.2 启动类和yml文件

需要在启动类上添加注解@EnableFeignClients以及@EnableDiscoveryClient

1.3 使用OpenFeign

1.3.1 简单使用@FeignClient

@SpringQueryMap:
spring cloud项目使用feign的时候都会发现一个问题,就是get方式无法解析对象参数。其实feign是支持对象传递的,但是得是Map形式,而且不能为空,与spring在机制上不兼容,因此无法使用。spring cloud在2.1.x版本中提供了@SpringQueryMap注解,可以传递对象参数,框架自动解析。

编写熔断类,发生错误时回调

引入FeignAutoConfiguration配置

上面是最简单的feign client的使用,声明完为feign client后,其他spring管理的类,如service就可以直接注入使用了,例如:

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1184.html

标签: feign 使用
分享给朋友:

“SpringCloud之Feign,OpenFeign讲解” 的相关文章

Linux 最主要的发行分支

Linux 有数百个发行分支。主要的有以下四个。slackwareSlackware 是由 Patrick Volkerding 在 1992 年推出的,它是全球现存最古老的 Linux 发行版。Slackware 被设计为高度可定制和强大的,并且要求用户了解 每个元素,它的包系统是不支持依赖的。...

程序员开发必会之git常用命令,git配置、拉取、提交、分支管理

整理日常开发过程中经常使用的git命令![送心]git配置SSH刚进入项目开发中,我们首先需要配置git的config、配置SSH方式拉取代码,以后就免输入账号密码了!# 按顺序执行 git config --global user.name "自己的账号" git config -...

Vue2的16种传参通信方式

前言先直入主题列出有哪些传参方式,下面再通过事例一一讲解。props(父传子)$emit与v-on (子传父)EventBus (兄弟传参).sync与update: (父子双向)v-model (父子双向)ref$children与$parent$attrs与$listeners (爷孙双向)pr...

Vue学习笔记之动态路由的参数传递应用及技巧

路由的参数传递:①通过params的类型· 配置路由格式:/router/:id· 传递的方式:在path后面跟上对应的值· 传递后形成的路径:/router/list,/router/profile这个就是前两篇中提到的"动态路由"中有应用过这个方法:②通过query的类型(对象方...

Vue从入门到实践 丨Vue-router基本使用

1. 什么是 vue-routervue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用,能够轻松的管理 SPA 项目中组件的切换。vue-router 的官方文档地址:https://router.vuejs.org/zh/2. vue-router 安装...

VUE3+JAVA商城源码小程序APP商城

三勾小程序商城基于springboot+element-ui+uniapp打造的面向开发的小程序商城,方便二次开发或直接使用,可发布到多端,包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。软件架构后端: springboot2.3.12管...