springboot中如何使用openfeign进行接口调用

 更新时间:2023年07月14日 16:41:56   作者:唱跑雨淋淋  
这篇文章主要介绍了springboot中如何使用openfeign进行接口调用问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

在项目开发过程中,我们开发的项目或多或少都会与其他交互的系统进行对接集成,或者是微服务项目之间进行调用,双方相互调用接口来获取或者传递数据,以往我们使用的方式可能有 httpClient、okhttp、httpUrlConnection 等等,来学习一下如何使用 openfeign 来进行调用。

一、feign 和 openfeign ?

Feign 是 Springcloud 组件中的一个轻量级 Restful 的 HTTP 服务客户端,Feign 内置了 Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。

Feign 的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。

OpenFeign 是 springcloud 在Feign的基础上支持了 SpringMVC 的注解,如 @RequestMapping 等等。

OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

二、为什么要使用 openfeign ?

1、Feign 本身不支持 Spring MVC 的注解,它有一套自己的注解

2、Fegin 是 Netflix 公司产品,停止更新了。

3、使用 OpenFeign 可以简化项目之间接口的调用,我们不需要关心 http 调用的代码

三、创建一个简单的服务提供方

创建一个基本的 springboot 项目

1、引入基础依赖

<dependencies>
		<dependency>
			<groupId> org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

2、application.yml 配置文件

server:
  port: 8081

3、创建一个 controller

@RestController
@RequestMapping("/demo")
public class FeignDemoController {
    @GetMapping("/test")
    public String test(){
        return "hello openfegin";
    }
}

4、启动服务

四、服务调用方 openfeign 调用服务提供方

创建一个基本的 springboot 项目

1、引入相关依赖

这里要注意springboot 和 springCloud 版本

当前 springboot 版本 2.3.4.RELEASE

springcloud 版本 Hoxton.SR4

<properties>
		<java.version>1.8</java.version>
		<spring.cloud-version>Hoxton.SR4</spring.cloud-version>
	</properties>
	<dependencies>
		<dependency>
			<groupId> org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>
	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring.cloud-version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

2、启动类中增加注解

开启 feign 功能

@SpringBootApplication
@EnableFeignClients
public class OpenfeginApplication {
	public static void main(String[] args) {
		SpringApplication.run(OpenfeginApplication.class, args);
	}
}

3、编写客户端调用接口

@FeignClient 标注该类是一个feign接口

  • name:因为这里并未进行服务注册,所以就随便命名一个
  • url:被调用的服务提供方的接口地址
@FeignClient(name = "demo",url = "http://localhost:8081/demo")
public interface FeginDemo {
    @GetMapping("test") //被调用接口的请求类型
    String test();
}

4、测试调用服务端提供端接口

@RestController
@RequestMapping("/feginDemo")
public class FeginDemoController {
    @Autowired
    FeginDemo feginDemo;
    @GetMapping("/test")
    public String test(){
        String test = feginDemo.test();
        return test;
    }
}

5、测试

启动项目,访问 http://localhost:8080/feginDemo/test

接口调用成功!

那么这里呢,我们就实现了通过 openfeign 完成一次简单的接口调用,如果没有使用 openfeign 这里的调用我们就只能通过 httpclient、okhttp 等方式来调用了,使用了 openfeign 之后,你会发现,调用别人的接口竟是如此简单。

五、openfeign 服务熔断

在调用接口过程中,由于是调用别人接口,肯定会存在一些意外因素,比如被调用的服务提供方系统宕机了,访问不到了等情况,如下比如我停止 被调用的服务提供方,再去进行调用

那么这个时候我们就需要用到服务熔断了,在对方服务异常的时候,返回这个信息肯定不太友好,我们来让它稍微友好一些

openfeign 中默认集成了 Hystrix

1、在 application.yml 配置文件中开启

feign:
  hystrix:
    enabled: true

2、配置 fallback 的处理类

创建一个类,实现我们的 FeginDemo ,然后实现接口中的方法,进行重写

@Component
public class ErrorMessage implements FeginDemo {
    @Override
    public String test() {
        return "服务器开小差了哦,请稍后再试";
    }
}

3、改造 feignClient

fallback:配置刚才的实现类 ErrorMessage

@FeignClient(name = "demo",url = "http://localhost:8081/demo",fallback = ErrorMessage.class)
public interface FeginDemo {
    @GetMapping("test")
    String test();
}

4、测试熔断效果

重新启动一下服务再进行访问

对于用户来说,这样是不是更加友好一点了呢?总比你一连串的英文往人家脸上呼来的好吧

六、配置日志

1、配置项目日志级别

logging:  level:    com.wxw.openfeign: debuglogging:
  level:
    com.wxw.openfeign: debug

2、配置 openfeign 日志级别

@Configuration
public class FeignLogConfiguration {
//    NONE:不记录任何日志信息,这是默认值。
//    BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
//    HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
//    FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据
    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

3、配置日志类

@FeignClient(name = "demo",url = "http://localhost:8081/demo",
fallback = ErrorMessage.class,configuration = FeignLogConfiguration.class)
public interface FeginDemo {
    @GetMapping("test")
    String test();
}

4、调用之后查看日志

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringMVC 处理后端日期格式的示例详解

    SpringMVC 处理后端日期格式的示例详解

    在WebMvcConfiguration中扩展SpringMVC的消息转换器,统一对日期类型进行格式处理,本文给大家介绍SpringMVC处理后端日期格式,感兴趣的朋友一起看看吧
    2023-11-11
  • 10种java数组合并的常用方法总结

    10种java数组合并的常用方法总结

    在Java中,合并(或连接)数组是常见的任务,这篇文章主要为大家整理了10个java中常用的数组合并方法,文中的示例代码简洁易懂,需要的小伙伴可以参考下
    2023-12-12
  • 详解如何让Spring MVC显示自定义的404 Not Found页面

    详解如何让Spring MVC显示自定义的404 Not Found页面

    这篇文章主要介绍了详解如何让Spring MVC显示自定义的404 Not Found页面,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • 利用Java简单实现一个代码行数统计器方法实例

    利用Java简单实现一个代码行数统计器方法实例

    这篇文章主要给大家介绍了关于如何利用Java简单实现一个代码行数统计器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 利用数组实现栈(Java实现)

    利用数组实现栈(Java实现)

    这篇文章主要为大家详细介绍了利用数组实现栈,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • SpringBoot集成消息队列的项目实践

    SpringBoot集成消息队列的项目实践

    本文主要介绍了SpringBoot集成消息队列的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • java中添加按钮并添加响应事件的方法(推荐)

    java中添加按钮并添加响应事件的方法(推荐)

    下面小编就为大家带来一篇java中添加按钮并添加响应事件的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • java实现Linux(centos) 中docker容器下命令交互的代码(配置向导)

    java实现Linux(centos) 中docker容器下命令交互的代码(配置向导)

    小编在开发项目时遇到个需求,因为系统部署每次都要多台机器拆分部署,很麻烦,怎么配置比较方便呢,今天小编给大家介绍java实现Linux(centos) 中docker容器下命令交互的代码(配置向导),感兴趣的朋友一起看看吧
    2021-05-05
  • 一文搞懂Java设计模式之责任链模式

    一文搞懂Java设计模式之责任链模式

    这篇文章主要给大家介绍了关于Java设计模式之责任链模式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java客户端调用.NET的WebService实例

    Java客户端调用.NET的WebService实例

    下面小编就为大家带来一篇Java客户端调用.NET的WebService实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09

最新评论