Spring Cloud 系列之服务调用 OpenFeign的实现
作者:Demo_Null 发布时间:2023-10-20 07:34:00
1.1 简介
1.1.1 概述
Feign 旨在使编写 Java Http 客户端变得更容易。在使用 Ribbon + RestTemplate 时,利用 RestTemplate 对 http 请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign 在 Ribbon 基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在 Feign 的实现下,我们只需创建一个接口并使用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了使用 Spring cloud Ribbon 时,自动封装服务调用客户端的开发量。与 Ribbon 不同的是,通过 Feign 只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用
Feign 已经停止维护,OpenFeign 是 Spring Cloud 在 Feign 的基础上进一步开发出来替代 Feign 的技术,支持了 SpringMVC 的注解,如 @RequesMapping 等等。OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通过 * 的方式产生实现类,实现类中做负载均衡并调用其他服务。
1.1.2 相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1.2 简单使用
1.2.1 基础工程
☞ eureka 项目
1.2.2 Feign 客户端
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/11/5
* @description Feign 接口
*/
@Component
@FeignClient("ProviderServer")// 服务提者名称
public interface ProviderFeign {
@GetMapping("/provider/get")// 服务地址
public String get();
}
1.2.3 启动类
@SpringBootApplication
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
1.2.4 调用服务
我们可以发现 Feign 自带负载均衡配置,而 OpenFeign 默认支持 Ribbon,我们可以通过 Ribbon 的配置来修改负载均衡策略。Ribbon 详情参考 ☞Spring Cloud 系列之负载均衡 Ribbon
1.3 其他配置
1.3.1 超时控制
# 设置 feign 客户端超时时间, 默认 1s
feign:
client:
config:
default:
connectTimeout: 5000
readTimeout: 5000
# OpenFeign 默认支持 Ribbon,也可以使用以下配置
ribbon:
# 建立连接所用时间,适用于网络正常的情况下,两端连接所用的时间
ConnectTimeout: 5000
# 建立连接后从服务器读取到可用资源所用的时间
ReadTimeout: 5000
1.3.2 数据压缩
feign:
compression:
request:
# 开启数据压缩请求
enabled: true
# 压缩数据类型
mime-types: text/xml, application/xml, application/json
# 数据压缩下限 2048表示传输数据大于2048 才会进行数据压缩(最小压缩值标准)
min-request-size: 2048
# 开启数据压缩响应
response:
enabled: true
1.3.3 日志配置
☞ 日志级别
♞ NONE
:不开启日志(默认)
♞ BASIC
:记录请求方法、URL、响应状态、执行时间
♞ HEADERS
:在 BASIC 基础上增加请求/响应头
♞ FULL
:在 HEADERS 基础上增加 body 和请求元数据
☞ 配置类
@Configuration
public class LogConfig {
@Bean
Logger.Level loggerLevel(){
return Logger.Level.FULL;
}
}
☞ 配置文件
logging:
level:
# 以什么级别监控那个接口
com.software.controller: debug
☞ 输出
☞ 源码
来源:https://blog.csdn.net/Demo_Null/article/details/109514731


猜你喜欢
- 本文实例讲述了基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览的方法。分享给大家供大家参考。具体分析如下:一
- 准备工具:IDEAjdk1.8Navicat for MySQLPostman一、新建Project选择依赖:mybatis Web Mys
- 项目代码:https://github.com/bruceq/supermarket项目结构:依赖关系:common:公共层,无依赖dao:
- 今天带大家实现滑动返回效果.,具体内容如下所示:先看看效果图:因为没有具体内容,也没有简书的图片资源,所以稍微简陋了点.但是依然不妨碍我们的
- JetpackJetpack,我觉得翻译为“飞行器”更好听,因为Google针对编程历史乱象,整理出
- 函数指针基础:1. 获取函数的地址2. 声明一个函数指针3.使用函数指针来调用函数获取函数指针:函数的地址就是函数名,要将函数作为参数进行传
- 一、概念 工厂方法模式是类的创建模式,又叫虚
- 一,需求来源在开发过程中,可能会要使用Win7 ,Win8 ,Win10等不同版本的系统去做兼容性调试,也有时候会去针对特别的显卡,无线网卡
- 在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。通常对象之间的比较可以从两个方面去看:第一个方面:对象的地址是否
- 本文实例讲述了Android SQLite数据库操作方法。分享给大家供大家参考,具体如下:SQLite and AndroidSQLite简
- 一、只读自动属性(Read-only auto-properties) C# 6之前我们构建只读自动属性: public stri
- 我就废话不多说了,大家还是直接看代码吧~package com.zejian.annotationdemo; import java.lan
- 本文实例讲述了Java ThreadLocal类应用。分享给大家供大家参考,具体如下:一 点睛ThreadLocal,是Thread Loc
- 一、Struts2文件上传 Struts2的文件上传实现非常简单,只需要简单几步就可完成;注意:(1)文件上传的struts2标签
- 写在前面“The origin server did not find a current representation for the t
- using System;using System.Collections.Generic;using System.Text;namesp
- 上篇介绍了几种图表的公共组件X、Y轴、背景Board的绘制。这章节介绍柱状图表的绘制,相对其它图表而言简单一些,这里主要介绍图表主体的绘制,
- 配置如下: <!--邀请用户送优惠券规则{邀请人规则:[{邀请人:优惠券ID}],使用邀请码人:优惠券ID},按照邀请人数从小到大配置
- 实现方式和继承方式有什么区别呢?*区别:*继承Thread:线程代码存放在Thread子类run方法中*实现Runnable:线程代码存放在
- 示例接口定义为了方便笔者先自己写了个简单的接口用于展示,返回当前时间,具体如下/// <summary>/// GetToday