系列九、Feign

news2024/10/6 12:27:25

一、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-openfeign

https://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 {

    @Bean
    public Logger.Level feignLogLevel() {
        return Logger.Level.FULL;
    }

}

1.7.3、局部配置

public class MyFeignConfig {

    @Bean
    public 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.coloradmin.cn/o/1352266.html

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

相关文章

鸿蒙原生应用再添新丁!中国移动 入局鸿蒙

鸿蒙原生应用再添新丁!中国移动 入局鸿蒙 来自 HarmonyOS 微博1月2日消息,#中国移动APP启动鸿蒙原生应用开发#,拥有超3亿用户的中国移动APP宣布,正式基于HarmonyOS NEXT启动#鸿蒙原生应用#及元服务开发。#HarmonyOS#系统的分布式…

openGauss学习笔记-183 openGauss 数据库运维-升级-升级操作

文章目录 openGauss学习笔记-183 openGauss 数据库运维-升级-升级操作183.1 就地升级和灰度升级操作步骤 openGauss学习笔记-183 openGauss 数据库运维-升级-升级操作 介绍就地升级、灰度升级和滚动升级的详细操作。 183.1 就地升级和灰度升级操作步骤 以root身份登录节点。 …

突发!博世「裁员」

对于未来几年的汽车行业需求变化,一级零部件供应商正在加快「降本增效」举措,犹如下游客户更加倾向于降本,而不是无休止的提升整车性能,比如,续航里程、智能化。 本周,全球汽车零部件龙头供应商博世宣布&am…

每日一题 2487. 从链表中移除节点(中等,回溯)

显然只要从后往前遍历链表,设 t 为当前的最大值,只要在遍历过程中比 t 小的节点都删除,大于等于 t 的则更新 t 为新的节点 通过递归回溯的方法可以很简单地实现从后往前遍历链表 # Definition for singly-linked list. # class ListNode: # …

SpringBoot实现Websocket聊天交友微信小程序(一)

记录一下我开发一个交友微信小程序并且上线运营的心得体会。 2022年10月1日上线的,到目前终于实现每天收益300左右。 界面比较简洁,功能有动态,动态可以选择话题,相册,相册可以设置看广告解锁,私信&#…

CCF模拟题 202312-2 因子化简

CCF模拟题 202312-2 因子化简 问题描述 试题编号: 202312-2 试题名称: 因子化简 时间限制: 2.0s 内存限制: 512.0MB 题目背景 质数(又称“素数”)是指在大于 1 的自然数中,除了 1 和它本身以外…

Nginx多ip部署多站点

目录 1.修改网卡配置信息 2.修改主要配置文件nginx.conf 1.修改网卡配置信息 1)来到网卡配置文件存放目录下 cd /etc/sysconfig/network-scripts/ 2)对 ifcfg-ens33 文件进行配置修改前先进行备份 cp ifcfg-ens33 ifcfg-ens33.default 3)先修改成最小配置,使用 d…

阿里云服务器Alibaba Cloud Linux镜像系统详细介绍

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

网络安全有哪些细分方向?零基础学Web安全需要掌握的知识(附系统路线+工具笔记)

前言 “没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。 一、网络安全行业特点 行业发展空间大,岗位非常多 网络安全行业产业以来,随即新增加了几十个…

0基础学java-day23(反射)

一、反射机制 1、一个需求引出反射 package com.hspedu.reflection.question;import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; …

努力打工的你存到钱了?2024新蓝海创业项目/适合普通人创业项目

为什么有钱人那么有钱?是他们够努力吗?有一位网友回答是这样回答的: “从小到大我所接触到的一切成功,他的基础都是努力,甚至于奉承时的吃得苦上苦方为人上人。但是那天我的三观出现了认知错误,光靠努力赚…

python c语言 代码动态检查,python c语言语法分析

大家好,小编来为大家解答以下问题,python c语言 代码动态检查,python c语言语法分析,今天让我们一起来看看吧! Source code download: 本文相关源码 初学编程,应该学习哪一门编程语言,有不少人感…

02--数据定义语言DDL

1、数据定义语言DDL 1.1 操作数据库-DDL 创建数据库 create database 数据库名称; 创建数据库,并指定字符集 create database 数据库名称 character set 字符集名; 查询所有数据库的名称 show databases; 查询某个数据库的字符集:查询某个数据库的创建语句及字…

二、Redis的特性与应用场景

Redis是一个在内存中存储数据的中间件,主要用于作为数据库、数据缓存,在分布式系统中有着非常重要的地位。面试中可以围绕Redis的特性进行介绍。 一、Redis特性 1、在内存中存储数据 MySQL主要是“表”的方式来存储组织数据的,是“关系型数…

聚醚胺市场分析:预计到2025年将达到10亿美元

聚醚胺是一种有机化合物,在涂料、胶粘剂、树脂等多种行业中用作固化剂、缓蚀剂和燃料添加剂。由于对广泛用于建筑和汽车行业的聚脲涂料的需求不断增加,全球聚醚胺市场一直在经历显着增长。 全球市场分析: 2020 年全球聚醚胺市场价值为 6.2 亿…

【竞技宝】LOL:S14新赛季改动 将trueskill2隐藏分算法

北京时间2024年1月3日,随着英雄联盟德玛西亚杯的进行,英雄联盟赛事已经进入新赛季的征途。每个赛季的春季赛之前,都会进行一次大的版本更新。据爆料,今年的S14版本大更新中,除了游戏内的英雄、道具、地图的更新之外,排位的隐藏分算法也将进行重大改变。 昨日,英雄联盟设计总监…

c++ 静态联编+动态联编 (多态)

静态多态 动态多态 1)静态多态和动态多态的区别就是函数地址是早绑定(静态联编)还是晚绑定(动态联编)。 如果函数的调用,在编译阶段就可以确定函数的调用地址,并产生代码,就是静态多态(编译时多态),就是说地址是早绑定…

Android Studio 报错AAPT: error: resource android:attr/lStar not found.解决方法!

目录 前言 一、报错信息 二、解决方法 三、常见处理方法总结 四、更多资源 前言 在快速发展的科技领域中,移动应用开发已经成为了一个非常热门的领域。而作为开发Android应用的主要工具之一,Android Studio 提供了丰富的功能和工具来帮助开发者构建…

c语言和python区别哪个难,c语言和python区别大不大

大家好,给大家分享一下c语言和python区别主要用来写什么,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目…

BMS均衡技术

一、电池的不一致性? 每个电池都有自己的“个性”,要说均衡,得先从电池谈起。即使是同一厂家同一批次生产的电池,也都有自己的生命周期、自己的“个性”——每个电池的容量不可能完全一致。例如以下的两个原因都会造成电池不一致…