`
阅读更多

SpringCloud OpenFeign使用和配置,Java OpenFeign 使用教程

SpringCloud  feign日志控制打印配置,SpringCloud feign超时配置

 

================================

©Copyright 蕃薯耀 2021-03-11

http://fanshuyao.iteye.com/

 

一、SpringCloud OpenFeign概述
spring-cloud-openfeign
声明式REST客户端:Feign创建一个用JAX-RS或Spring MVC批注装饰的接口的动态实现。

官方文档:

https://docs.spring.io/spring-cloud-openfeign/docs/2.2.7.RELEASE/reference/html/

 

Feign是声明性的Web服务客户端。 它使编写Web服务客户端更加容易。 要使用Feign,请创建一个接口并对其进行注释。 它具有可插入注释支持,包括Feign注释和JAX-RS注释。 Feign还支持可插拔编码器和解码器。 Spring Cloud添加了对Spring MVC注释的支持,并支持使用Spring Web中默认使用的相同HttpMessageConverters。 Spring Cloud集成了Ribbon和Eureka以及Spring Cloud LoadBalancer,以在使用Feign时提供负载平衡的http客户端。

Java版本相容性
Feign 10.x及更高版本基于Java 8构建,并且应可在Java 9、10和11上运行。对于那些需要JDK 6兼容性的应用程序,请使用Feign9.x。

Feign集成了Ribbon,默认是轮询的负载均衡。

 

二、SpringCloud OpenFeign使用和配置

使用Eureka实现服务注册和和发现


1、pom.xml引入依赖:spring-cloud-starter-openfeign

复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.4.4</version>
</dependency>
复制代码

 


2、application.properties配置

复制代码
server.port=8645

spring.application.name=SPRINGCLOUD-EUREKA-FEIGN-WEB

#eureka服务端的实例名称
eureka.instance.hostname=eureka8701.com

#eureka实例名称
eureka.instance.instance-id=eureka-feign-8645
#路径显示IP地址
eureka.instance.prefer-ip-address=true
#eureka客户端向服务端发送心跳的时间间隔,单元为秒,默认为30秒
eureka.instance.lease-renewal-interval-in-seconds=2
#eureka服务端收到最后一次心跳等待的时间上限,超时将移除服务,单元为秒,默认为90秒
eureka.instance.lease-expiration-duration-in-seconds=5

#false表示向注册中心注册自己
eureka.client.register-with-eureka=false
#是否从Eureka抓取已有的注册信息,默认为true。单节点不用设置,集群必须设置为true,才能配置ribbon使用负载均衡
eureka.client.fetch-registry=true
#设置与Eureka server交互的地址查询服务和注册服务都需要依赖这个地址
eureka.client.service-url.defaultZone=http://eureka8501.com:8501/eureka
复制代码

 

3、启动类

@EnableFeignClients申明该项目是Feign客户端,不然声明式接口服务注入失败

复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
//@EnableFeignClients申明该项目是Feign客户端,不然声明式接口服务注入失败
@EnableFeignClients
public class SpringCloudFeignWeb8645Application {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudFeignWeb8645Application.class, args);
    }

}
复制代码

 

4、接口服务类

@FeignClient:name和value是一个东西,值为Eureka注册的服务名称

复制代码
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

import com.lqy.springCloud.feign.web.controller.Result;

/**
 * OpenFeign是一种声明式、接口化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。
 *
 */
//不要@Component也可以
//@FeignClient:name和value是一个东西,值为Eureka注册的服务名称
@FeignClient(value="SPRINGCLOUD-EUREKA-SERVER")
public interface OpenFeignService {

    @RequestMapping("/test")
    public Result test();
    
    
    @RequestMapping("/timeout")
    public Result timeout();
    
}
复制代码

 

5、Controller请求类

复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.lqy.springCloud.feign.web.service.OpenFeignService;


@RestController
@RequestMapping("/web")
public class FeignController {

    @Autowired
    private OpenFeignService openFeignService;
    
    @RequestMapping(value="/get", produces = MediaType.APPLICATION_JSON_VALUE)
    public Result get() {
        Result result = openFeignService.test();
        return result;
    }
    
    /**
     * 
     * @return
     */
    @RequestMapping(value="/timeout", produces = MediaType.APPLICATION_JSON_VALUE)
    public Result timeout() {
        Result result = openFeignService.timeout();
        return result;
    }
    
}
复制代码

 

6、feign超时配置(application.properties配置)
启用Hystrix后,其超时配置默认为1000毫秒。 因此,它可能发生在我们之前配置的客户端超时之前。 增加此超时将阻止它的发生。

#feign客户端建立连接最大的时间
feign.client.config.default.read-timeout=3000
#建立连接后,从服务器获取响应结果的最大时间
feign.client.config.default.connect-timeout=3000

 

openFeign超时报错:

复制代码
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Mar 10 17:10:19 CST 2021
There was an unexpected error (type=Internal Server Error, status=500).
Read timed out executing GET http://SPRINGCLOUD-EUREKA-SERVER/timeout
feign.RetryableException: Read timed out executing GET http://SPRINGCLOUD-EUREKA-SERVER/timeout
    at feign.FeignException.errorExecuting(FeignException.java:249)
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:129)
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:89)
    at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100)
Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
复制代码

 

7、feign日志控制打印配置(application.properties配置)

格式:logging.level.完整的类路径:DEBUG

#打印日志的4个级别:none、basic、headers、full
feign.client.config.default.logger-level=full
#设置要日志打印的接口类
logging.level.com.lqy.springCloud.feign.web.service.OpenFeignService: DEBUG

打印的日志详细:

复制代码
2021-03-10 17:03:12.532 DEBUG 6428 --- [nio-8645-exec-3] c.l.s.f.web.service.OpenFeignService     : [OpenFeignService#test] ---> GET http://SPRINGCLOUD-EUREKA-SERVER/test HTTP/1.1
2021-03-10 17:03:12.533 DEBUG 6428 --- [nio-8645-exec-3] c.l.s.f.web.service.OpenFeignService     : [OpenFeignService#test] ---> END HTTP (0-byte body)
2021-03-10 17:03:12.538 DEBUG 6428 --- [nio-8645-exec-3] c.l.s.f.web.service.OpenFeignService     : [OpenFeignService#test] <--- HTTP/1.1 200 (4ms)
2021-03-10 17:03:12.538 DEBUG 6428 --- [nio-8645-exec-3] c.l.s.f.web.service.OpenFeignService     : [OpenFeignService#test] connection: keep-alive
2021-03-10 17:03:12.538 DEBUG 6428 --- [nio-8645-exec-3] c.l.s.f.web.service.OpenFeignService     : [OpenFeignService#test] content-type: application/json
2021-03-10 17:03:12.538 DEBUG 6428 --- [nio-8645-exec-3] c.l.s.f.web.service.OpenFeignService     : [OpenFeignService#test] date: Wed, 10 Mar 2021 09:03:12 GMT
2021-03-10 17:03:12.538 DEBUG 6428 --- [nio-8645-exec-3] c.l.s.f.web.service.OpenFeignService     : [OpenFeignService#test] keep-alive: timeout=60
2021-03-10 17:03:12.538 DEBUG 6428 --- [nio-8645-exec-3] c.l.s.f.web.service.OpenFeignService     : [OpenFeignService#test] transfer-encoding: chunked
2021-03-10 17:03:12.538 DEBUG 6428 --- [nio-8645-exec-3] c.l.s.f.web.service.OpenFeignService     : [OpenFeignService#test] 
2021-03-10 17:03:12.538 DEBUG 6428 --- [nio-8645-exec-3] c.l.s.f.web.service.OpenFeignService     : [OpenFeignService#test] {"result":true,"timestamp":"2021-03-10 17:03:12","msg":"操作成功。","datas":"端口:8601"}
2021-03-10 17:03:12.539 DEBUG 6428 --- [nio-8645-exec-3] c.l.s.f.web.service.OpenFeignService     : [OpenFeignService#test] <--- END HTTP (97-byte body)
复制代码

 

8、feign请求启用请求或响应GZIP压缩(application.properties配置)

#您可以考虑为您的Feign请求启用请求或响应GZIP压缩。通过启用以下属性之一来做到这一点:
feign.compression.request.enabled=true
feign.compression.response.enabled=true

 

 

(如果文章对您有所帮助,欢迎捐赠,^_^)

 

================================

©Copyright 蕃薯耀 2021-03-11

http://fanshuyao.iteye.com/

1
1
分享到:
评论

相关推荐

    微服务 Springcloud OpenFeign

    本文将详细探讨Spring Cloud OpenFeign的相关知识点,帮助初学者更好地理解和运用这一技术。 首先,我们需要了解OpenFeign的基本概念。OpenFeign是Netflix开源的一个HTTP客户端,它的设计目标是让编写分布式系统的...

    spring-cloud-openfeign-core-3.1.1-API文档-中英对照版.zip

    标签:cloud、spring、openfeign、core、springframework、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...

    spring-cloud-openfeign-core-3.1.1-API文档-中文版.zip

    标签:cloud、spring、openfeign、core、springframework、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变...

    Spring Cloud OpenFeign - - - > 契约配置

    所以有些公司开发使用的就是早期的 Spring Cloud,而在后期公司想进行版本升级的时候,改成使用Spring Cloud OpenFeign,但 Feign 使用的是他自己独有的那一套注解,如果我们想全部进行修改成 Spring MVC注解的话,...

    SpringCloud-OpenFeign服务接口调用及代码

    三、OpenFeign在SpringCloud项目中的配置 1. 添加依赖:在项目的pom.xml文件中引入Spring Cloud OpenFeign的相关依赖。 2. 启用OpenFeign:在Spring Boot的主配置类上添加`@EnableFeignClients`注解,开启OpenFeign...

    springcloud整合openfeign完整代码

    首先,**Spring Cloud OpenFeign** 是一个基于Java的声明式Web服务客户端。它通过创建一个接口并注解其方法,来定义HTTP端点。OpenFeign会自动构建并执行HTTP请求,简化了客户端实现。在项目中,我们可以通过定义一...

    spring-cloud-openfeign-core-3.0.4-API文档-中文版.zip

    标签:springframework、cloud、spring、openfeign、core、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变...

    Springcloud + openfeign+mybatisplus+swagger+msql使用eureka注册中心

    Springcloud + openfeign+mybatisplus+swagger+msql使用eureka注册中心 Eureka由两部分组成,服务端和客户端,服务端是注册中心,用来接收其他服务的注册,客户端是java客户端,用开注册,并实现负载均衡,其中...

    springcloud中openfeign使用

    下面,我们将深入探讨OpenFeign在Spring Cloud中的使用,并通过实际的示例代码进行解析。 ### 1. OpenFeign简介 OpenFeign(原名Feign)是由Netflix开发的一个声明式HTTP客户端。它的设计灵感来源于Retrofit和...

    7天学会spring cloud教程.pdf.zip

    1. Spring Cloud Zuul:介绍Zuul作为API Gateway的角色,学习如何配置和使用Zuul进行请求路由和过滤。 2. Spring Cloud Gateway:对比Zuul,理解Spring Cloud Gateway的优势,学习其动态路由、过滤器链等功能。 第...

    spring cloud + shiro集成方案

    手把手教你集成spring cloud + shiro微服务框架;用最少的工作量,改造基于shiro安全框架的微服务项目,实现spring cloud + shiro 框架集成。博客地址:...

    spring cloud openfeign 源码实例解析

    Spring Cloud OpenFeign 是基于 Spring Boot 和 Netflix 的 OpenFeign 框架实现的客户端负载均衡器,本文将对 Spring Cloud OpenFeign 源码进行实例解析,通过示例代码对其进行详细介绍,对大家的学习或者工作具有...

    Spring Cloud Feign统一设置验证token实现方法解析

    在Spring Cloud Feign中,我们可以使用FeignConfiguration来配置Feign组件的行为。在这里,我们可以创建一个FeignConfiguration配置类来配置Feign组件的日志和拦截器。例如,我们可以创建一个...

    springcloud教程.zip

    SpringCloud是Java领域中广泛使用的微服务架构框架,它提供了丰富的工具和服务来帮助开发者构建、配置、管理和部署分布式系统。本教程将通过一个具体的天气预报系统项目,带你深入理解和掌握SpringCloud的核心概念和...

    SpringCloud 15个完整例子

    SpringCloud是中国Java开发者广泛使用的微服务框架,它包含了一系列组件,用于构建分布式系统。这个压缩包文件"SpringCloud 15个完整例子"提供了一系列从基础到进阶的示例项目,帮助用户深入理解并实践SpringCloud的...

    基于springcloud+springboot+nacos+openFeign的分布式事务组件seata项目源码.zip

    分布式事务组件seata的使用demo,AT模式、TCC模式,集成springboot、springcloud(nacos注册中心、openFeign服务调用、Ribbon负载均衡器)、spring jpa,数据库采用mysql demo中使用的相关版本号,具体请看代码。...

    SpringCloud第二季脑图.rar

    周阳老师的笔记可能涵盖了上述知识点的实践案例、最佳实践和常见问题解答,对于深入理解SpringCloud的使用和设计原则具有很高的价值。通过阅读和研究这个压缩包中的内容,开发者可以系统地学习SpringCloud,并提升...

    方志朋版——深入理解Spring Cloud与微服务构建.pdf

    《深入理解Spring Cloud与微服务构建》是针对Java开发者,特别是对微服务架构感兴趣的开发者的一本重要参考资料。Spring Cloud作为目前最流行的微服务框架之一,它提供了构建分布式系统所需的多种工具和服务,包括...

    SpringCloud.pdf

    1. **分布式/版本化配置**:Spring Cloud Config 提供了一个集中式的配置服务器,允许服务动态地获取和更新配置。这使得在分布式环境中管理和维护配置变得更加容易,支持配置的版本控制。 2. **服务注册与发现**:...

    Spring Cloud alibaba 集成 Sentinel openfeign nacos

    在本教程中,我们将深入探讨如何将 Sentinel 整合到基于 Spring Cloud Alibaba 的 OpenFeign 客户端中,并利用 Nacos 作为配置中心和服务发现。 1. **Sentinel** - Sentinel 是一个流量控制、熔断和降级的开源框架...

Global site tag (gtag.js) - Google Analytics