系列九、Feign

一、Feign

1.1、Java中如何实现跨接口调用

(1) Httpclient
        Httpclient是Apache Jakarta Comon下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议的最新版本和建议。HttpClient相比特统JDK自带的URL Connection,提升了易用性和灵活性,使客户端发送HTTP请求变得容易,提高了开发的效率;
(2)OKhttp
        OKHttp一个处理网络请求的开源项目,是安卓端最火的轻量级框架,由Square公司贡献,用于替代HttpUrlConnection和Apache HttpClient。OkHttp拥有简洁的API、高效的性能,并支持多种协议(HTTP/2和SPDY);

(3) HttpURLConnection

        HttpURLConnection是Java的标准类,继承自URLConmecdion,可用于向指定网站发送GET/POST请求。HttpURLConnection使用比较复杂,不像HttpClien那样容易使用;

(4) RestTemplate / Webclient
        RestTemplate是 Spring提供的用于访问Rest服务的客户端,它提供了多种便捷访问远程HTTP服务的方法,能够大大提高客户端的编写效率。上面介绍的是最常见的几种调用接口的方法,下面要介绍的方法比上面的更简单、方便,它就是Feign。

1.2、概述

        Feign是Neflix开发的声明式、模板化的HTTP客户端,其灵感来自Rerofit、JAXRS-2.0以及WebSocket。Feign可以帮助程序员更加便捷、优雅地调用HTTP API,Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。Spring Cloud OpenFeign对Felign进行了增强,使其支持Spring MVC注解,另外还整合了Ribbon和Nacos,从而使得Feign的使用更加方便!

1.3、官网

https://cloud.spring.io/spring-cloud-static/Hoxton.SR1/reference/htmlsingle/#spring-cloud-openfeignhttps://github.com/spring-cloud/spring-cloud-openfeign

1.4、优势

        Feign可以做到使用HTTP请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感加不到这是个HTTP请求。它像Dubbo一样,consumer直接通过接口方调用provider,而不需要通过常现的HttpClient构造请求再解析返回数据。它解决了让开发者调用远程接口就跟调用本地方法一样,无需关注与远程的交互细节,更无需关注分布式环境开发。

1.5、功能

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

1.6、Feign vs OpenFeign

 

1.7、Feign日志配置

1.7.1、概述

        Feign日志配置是指消费者端通过Feign调用远程服务时,如何查看具体的调用细节。Feign的日志配置分为两种,即:全局配置和局部配置;

1.7.2、全局配置 

@Configuration
public class MyFeignConfig {@Beanpublic Logger.Level feignLogLevel() {return Logger.Level.FULL;}}

1.7.3、局部配置

public class MyFeignConfig {@Beanpublic Logger.Level feignLogLevel() {return Logger.Level.FULL;}}
@FeignClient(name = "product-service-nacos",path = "/product",configuration = MyFeignConfig.class)
public interface ProductFeignService {/*** 根据商品id查询商品* @param id* @return*/@GetMapping("/getProductById/{id}")public String getProductById(@PathVariable("id") Integer id);}

1.7.4、注意事项

        不管全局配置还是局部配置,都需要在yml中调整Feign的日志级别,因为Spring Boot默认的日志级别是INFO,DEBUG级别的日志不会打出来。

1.8、Feign超时时间配置

1.8.1、概述 

        Feign超时时间配置是指,消费者端在调用服务端业务时,针对连接时间和请求处理时间的一些设置,连接时间主要用于处理因网络请求出现的超时情况,请求处理时间用于处理调用对方业务的等待时间,例如我现在调用商品服务的A接口,正常情况下能够很快返回,如果某一时刻A接口挂了,那我不可能永远的等待下去,可以设置一个超时时间,如果在指定的时间内没有返回结果给我,那就会抛出异常,不会拖垮消费者端。

1.8.2、两种方式配置

(1)代码方式

 

/*** Feign超时时间配置*      连接超时时间,默认2秒*      请求处理超时时间,默认5秒* @return*/
@Bean
public Request.Options options() {return new Request.Options(2000,3000);
}

(2)配置文件方式

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

摆烂式学习ssh

摆烂式学习ssh ssh工作原理ssh基本使用sshd配置文件密钥登录1.客户端2.服务器3.注意事项4.使用密钥登录测试 ssh高级使用技巧1.在非正规端口启动2.rsync 命令3.透过 ssh 通道加密原本无加密的服务4.以ssh信道配合x server 传递图形接口5.ssh配合virtualbox虚拟机使用技巧 ssh工…

【输入npm install express出现的报错】

目录 输入:npm install express,出现如下的报错 分析原因 方法1:用管理员的身份进行安装 方法2:更改文件夹的权限 输入:npm install express,出现如下的报错 分析原因: npm在执行安装过程中…

为什么要太空探索?未来万亿人口 人类移居太空是不可避免的。大语言模型是发现 贝索斯

管理的思考 「最以客户为中心」「果断」「如何决策」 贝索斯给亚马逊的使命是「世上最以客户为中心的公司」(以客户需求为起点,反向推动工作)。贝索斯给蓝色起源的使命是「世上最果断的公司」(我们将变得非常擅长在技术上恰当地冒险,并快速地作出那些决…

IMS基本架构

IP Multimedia Core Network Subsystem (IMS)商用已久,相对于CS domain的语音方案,IMS则是基于IETF定义的会话控制功能与多媒体传输功能通过IP-CAN实现的 全IP完整语音解决方案。 IMS能为无线和有线用户实现语音、视频、消息、数据等服务。便于运营商通过…

泰凌微Telink pwm的一个坑

泰凌微芯片输出PWM期间不能进入suspend 我的灯是低亮 所以代码中是 rgb_pwm_io_t[index].duty APP_PWM_MAX_VALUE - duty; 头文件 #ifndef APP_RGB_PWM_H_ #define APP_RGB_PWM_H_#define PWM_ID_R PWM3_ID // zxk 20230426 #define PWM_ID_G PWM2_ID #define PWM_ID_…

内联函数的作用

目的 主要为了提升程序运行速度。 分析 当程序调用一个函数时,程序暂停执行当前指令,跳到函数体处执行,在函数执行完后,返回原来的位置继续执行。如果该函数为内联函数,则不同跳,是因为该内联函数直接插…

Model::unguard()的作用

这是在生成假数据时碰见的,浅查了一下 Model::unguard() 是 Laravel 框架中的一个方法,它的作用是取消对 Eloquent 模型的属性赋值的安全性保护。 在默认情况下,Laravel 的 Eloquent 模型会对属性赋值做一些安全性检查,例如防止…

报告解读:中国新一代终端安全市场洞察,2023

报告解读 中国新一代终端安全市场洞察 2023 安全防御的“最前线” 01 混沌的企业安全 以下来自CSO们最关注的安全热点问题: Q1我们如何看待当下泛化的终端安全,混合的IT环境企业面临的安全变化? IDC:伴随着全球数字化转型的快…

win11操作系统下eNSP 安装及使用

eNSP是华为出品的一款网络设备模拟软件,非常的好用。在这款软件面世之前,博主也曾经使用过思科或其他厂家的模拟软件,要么界面不友好,要么操作很繁琐,并且大部分软件的运行环境配置很复杂,费九牛二虎之力都…

【C语言】作用域 和 生命周期

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

分布式系统架构设计之分布式数据存储的备份恢复和监控故障排查

七、数据备份和恢复 在分布式数据存储中,数据备份和恢复是保障数据存储系统可靠性和容灾性的重要组成部分。这里会给大家介绍关于数据备份和恢复的关键考虑: 数据备份策略 定期备份:设定定期的数据备份计划,根据业务需求选择合…

深入数组扩展应用

一、字符串反转 例如:‘123abc’----->‘cba321’ 字符串方法实现: var str 123abcvar reversFn function(str) {var newStr for (var i str.length - 1; i > 0; i--) {newStr str[i]}return newStr }console.log(reversFn(str));数组方法实现&#xf…