文章目录 1、OpenFeign组件简介 2、使用RestTemplate+Ribbon已经完成服务调用,为什么还要使用Feign? 3、OpenFeign服务调用 3.1 创建两个独立的SpringBoot应用,并注册到服务注册中心(这里我用的consul服务注册中心) 3.2 引入服务注册中心依赖 3.3 修改配置文件 3.4 入口类加注解 3.5 在服务调用放引入OpenFeign依赖 3.6 在服务调用方入口类加如注解,开启Feign调用支持 3.7 开发客户端接口 3.8 服务调用测试 1、OpenFeign组件简介 Spring 参数" + name, String.class); 存在问题: 1.每次调用服务都需要写这些代码,存在大量的代码冗余 2.服务地址如果修改,维护成本增高 3.使用时不够灵活 3、OpenFeign服务调用 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign
前提 服务注册中心Nacos+服务提供者 Sentinel 会搭建SpringBoot(2.x)+web 服务消费者:OpenFeign使用 代码下载:https://github.com/cbeann /share/tree/master/nacos-sentinel-openfeign 在SpringBoot(2.2.2)+web的基础之上 添加pom依赖 <! – openfeign –>--> <dependency> <groupId>org.springframework.cloud </groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.1 的日志增强 添加OpenFeign的日志类 import feign.Logger; import org.springframework.context.annotation.Bean; import
在配置类中加入@EnableFeignClients注解,该注解引入相关类FeignClientsRegistrar,通过此类进行客户端@FeignClient注册;@FeignClient注解放在接口类中。
OpenFeign Feign是一个WebService客户端。使用Feign能让编写WebService客户端更加简单。 它的使用方法是定义一个服务接口然后再上面添加注解。 而与Ribbon不同的是,通过Feign只需要定义服务绑定接口且以声明式的方式,优雅而简单的实现了服务调用 1.3 Feign和OpenFeign Feign式SpringCloud组件中的一个轻量级RESTful 的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务,Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务 OpenFeign OpenFeign的@FeignClient可用解析SPringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务 2. OpenFeign 开发 引入jar包: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign
--openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!
Feign和OpenFeign两者区别 Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务 OpenFeign的@Feignclient可以解析SpringMVc的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。 --openfeign--> <dependencies> <dependency> <groupId>org.springframework.cloud </groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 客户端默认3s return paymentFeignService.paymentFeignTimeout(); } OpenFeign默认等待一秒钟,超过后报错 YML文件里需要开启OpenFeign
top_right_bar_window_history.content.click 2.深入理解Feign之源码解析-腾讯云开发者社区-腾讯云 (tencent.com) 3.https://github.com/OpenFeign /feign 工作原理: openFeign是一个伪客户端(以下简称Feign),即它不做任何的请求处理。 new IOException("URL '" + request.url() + "' couldn't be parsed into a URI", e); } // http的->openfeign /groupId> <artifactId>feign-httpclient</artifactId> </dependency> <dependency> <groupId>io.github.openfeign 插拔式 1.Java SPI -> 无法提供依赖注入,无法动态选择实现类 2.Dubbo SPI -> 额外添加Dubbo依赖,Dubbo SPI与业务模型耦合 3.SpringBoot的自动装配 -> OpenFeign
SpirngCloud集成OpenFeign OpenFeign的前身Feign Feign集成了Ribbon Feign和OpenFeign两者区别 OpenFeign服务调用 OpenFeign超时控制 设置超时时间控制 OpenFeign日志增强 OpenFeign的前身Feign Feign旨在使编写Java Http客户端变得更容易。 <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <! 启动 http://localhost/consumer/payment/get/1 Feign自带负载均衡配置项 OpenFeign超时控制 OpenFeign发送请求给对应的服务端后,默认响应时间为 封装的底层的Ribbon只会调用没有暂停的那个服务端 OpenFeign默认等待1秒钟,超过后报错 设置超时时间控制 YML文件里需要开启OpenFeign客户端超时控制 #设置feign客户端超时时间
1.日志级别 2.配置 2.1增加config /** * @author dencycheng * @date 2020/11/26 9:59 下午 */ @Configuration pub
OpenFeign 整合 Sentinel 实现服务降级 引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot -- openfeign 服务调用 --> <dependency> <groupId>org.springframework.cloud</groupId> < artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <! info 因此 feign的debug日志级别就不会输出 logging: level: com.learning.springcloud.order.feign: debug # openfeign ; } } OpenFeign 接口类 增加 fallback 属性, 值为服务降级处理类 // fallback = StockFeignServiceForback.class @FeignClient
feign定制使用 项目背景 基本模式和流程 引入OpenFeign Feign的定制 Encoder(加签) RequestInterceptor(Header传递) Decoder(统一解码) 项目背景 对外暴露一个maven的依赖,客户的开发人员引入依赖就可以拥有默认的业务功能; 基本流程为: 前端调用(可以定制) → 客户服务(作为后端,主要面向一层) → 调用中台网关(新增的一层网关) → 内部服务 引入OpenFeign 公司内部服务于服务之间的调用使用的是OpenFeign 使用OpenFeign时代码足够简洁 公司开发人员使用OpenFeign贼溜(虽然他们不知道contextId是什么,碰到两个服务名相同的FeignClient 就束手无策) 可能是基于上面的原因,也可能是项目时间紧,拍板子的人随便拍一下脑袋就决定了,那么使用OpenFeign这个事情就愉快的定下来了; Feign的定制 但是使用过程中碰到了一些问题,因为以前对 OpenFeign也有一定的了解,所以解决了使用过程中碰到的一些OpenFeign的问题;简单记录一下; Encoder(加签) 接口对外暴露那么肯定会加签, 对接第三方的时候都需要有密钥/token之类的
OpenFeign OpenFeign是springcloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等等。 OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。 getPaymentById(@PathVariable("id") Long id){ return paymentFeignService.getPaymentById(id); } } OpenFeign 重点:由于Feign天生支持Ribbon所以在超时控制这块由Ribbon来控制 #设置feign 客户端超时时间(openFeign默认支持ribbon) ribbon: #指的是建立连接后从服务器读取到可用资源所用的时间
-- openfeign 远程调用 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.2.0.RELEASE</ org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients import com.ruben.pojo.dto.PageDTO; import com.ruben.utils.AjaxJson; import org.springframework.cloud.openfeign.FeignClient
OpenFeign快速入门 引言 Feign远程调用 Feign替代RestTemplate 自定义配置 配置文件方式 Java代码方式 Feign使用优化 最佳实践 继承方式 抽取方式 实现基于抽取的最佳实践 ---- 引言 本文主要对OpenFeign的使用进行简单记录,主要作为个人日后复习笔记所用,不建议初学者阅读。 RestTemplate发起远程调用的代码: 存在下面的问题: • 代码可读性差,编程体验不统一 • 参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign --httpClient的依赖 --> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient
OpenFeign默认等待一秒钟,超过后报错 Request processing failed; nested exception is feign.RetryableException: connect timed out executing GET http://CLOUD-PAYMENT-SERVICE/payment/getTimeout/1] with root cause 由于OpenFeign
1、OpenFeign介绍 OpenFeign为了微服务之间的调用更简单。 相当于Ribbon + RestTemplate的封装 只需要定义服务绑定接口且以声明式的方法,实现服务调用 2、OpenFeign服务调用 已集成Ribbon 启动类 @SpringBootApplication Long id){ return paymentFeignService.getPaymentById(id); } } 总结 微服务调用接口+@Feign 自带负载均衡配置 3、OpenFeign GetMapping(value = "/consumer/payment/feign/timeout") public String paymentFeignTimeout() { //openFeign-ribbon consumer/payment/feign/timeout 解决方式,修改yml http://localhost/consumer/payment/feign/timeout 访问成功 4、OpenFeign
#Spring Cloud 之 OpenFeign 前言 OpenFeign 全称 Spring Cloud OpenFeign,它是 Spring 官方推出的一种声明式服务调用与负载均衡组件。 |注解|说明 |------ ||该注解用于通知 OpenFeign 组件对 |注解下的接口进行解析,并通过动态代理的方式产生实现类,实现负载均衡和服务调用。 | ||该注解用于开启 OpenFeign 功能,当 Spring Cloud 应用启动时,OpenFeign 会扫描标有 |注解的接口,生成代理并注册到 Spring 容器中。 | 2、实践 2.1、修改pom.xml配置 在上一章节 【《微服务实战》 第五章】 基础上,添加OpenFeign依赖项 <? -- --> SpringApplication.run(CustomerApiApplication.class, args); } } 2.5、远程调用超时设置 openFeign
OpenFeign服务接口调用 1、OpenFeign概述 1.1 OpenFeign是什么? 1.2 OpenFeign能干什么? 3.1.6 开启OpenFeign客户端超时控制 3.1.7 再次测试 4、OpenFeign日志打印功能 4.1 是什么? 4.2 日志级别 4.3 配置日志bean 4.4 YML文件里需要开启日志的Feign客户端 4.5 日志增强测试 1、OpenFeign概述 1.1 OpenFeign是什么? 2.7 小总结 总之,服务提供者有什么服务,在OpenFeign就调用什么服务,要特别注意OpenFeign中接口和服务提供者中的对应上。 OpenFeign默认是支持Ribbon的。