java springCloud OpenFeign远程调用详细使用教程


一、什么是OpenFeign?它的作用是什么?

  • OpenFeign是一种基于接口的声明式Web服务客户端,它简化了使用RESTful服务的过程,并提供了一些高级功能,例如负载均衡、服务发现、请求重试等。
  • OpenFeign是Spring Cloud家族的一个成员,它最核心的作用是为HTTP形式的RestAPI提供了非常简洁高效的RPC调用方式。
  • OpenFeign的核心思想是通过定义接口来实现服务间通信,这样就可以将服务调用的过程封装起来,并且可以像调用本地方法一样来调用远程服务,极大地降低了使用RESTful服务的复杂度和工作量。

二、如何使用OpenFeign实现远程调用?

  1. 在pom.xml文件中添加spring-cloud-starter-openfeign依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>


  1. 在启动类上添加@EnableFeignClients注解,开启Feign客户端的扫描和注册:
@SpringBootApplication
@EnableFeignClients
public class ExampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExampleApplication.class, args);
    }
}
  1. 定义一个接口,用@FeignClient注解来标识它是一个Feign客户端,并指定模块名:
@FeignClient(value="book-service")
public interface JSONPlaceHolderClient {
    @GetMapping("/posts")
    List<Post> getPosts();

    @GetMapping("/posts/{postId}")
    Post getPostById(@PathVariable("postId") Long postId);
}
  1. 在需要调用远程服务的地方,注入定义好的Feign客户端接口,并直接调用其方法:
@RestController
public class ExampleController {
    @Autowired
    private JSONPlaceHolderClient jsonPlaceHolderClient;

    @GetMapping("/posts")
    public List<Post> getPosts() {
        return jsonPlaceHolderClient.getPosts();
    }

    @GetMapping("/posts/{postId}")
    public Post getPostById(@PathVariable("postId") Long postId) {
        return jsonPlaceHolderClient.getPostById(postId);
    }
}

这样,我们就可以使用OpenFeign来轻松地调用远程服务了。OpenFeign还提供了很多高级功能,比如日志、拦截器、重试、熔断等 ,可以参考官方文档来了解更多。

三、如何配置OpenFeign的连接池?

Feign底层发起http请求,依赖于其它的框架。其底层支持的http客户端实现包括:

  • HttpURLConnection:默认实现,不支持连接池
  • Apache HttpClient :支持连接池
  • OKHttp:支持连接池

因此我们通常会使用带有连接池的客户端来代替默认的HttpURLConnection。比如,我们使用OK Http.

1. 引入依赖

cart-servicepom.xml中引入依赖:

<!--OK http 的依赖 -->
<dependency>
  <groupId>io.github.openfeign</groupId>
  <artifactId>feign-okhttp</artifactId>
</dependency>

2. 开启连接池

cart-serviceapplication.yml配置文件中开启Feign的连接池功能:

feign:
  okhttp:
    enabled: true # 开启OKHttp功能

重启服务,连接池就生效了。

四、如何配置OpenFeign输出日志的级别?

OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级:

  • NONE:不记录任何日志信息,这是默认值。
  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

Feign默认的日志级别就是NONE,所以默认我们看不到请求日志。

1. 在一个通用模块中定义一个配置类

package com.yangzhuo.api.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;

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

2. 配置这个类

接下来,要让日志级别生效,还需要配置这个类。有两种方式:

  • 局部生效:在某个FeignClient中配置,只对当前FeignClient生效
@FeignClient(value = "book-service", configuration = DefaultFeignConfig.class)
  • 全局生效:在@EnableFeignClients中配置,针对所有FeignClient生效。
@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class)
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenFeign是一个基于Java的HTTP客户端,它简化了与HTTP服务之间的通信。它使用注解来定义HTTP请求,并且与Ribbon和Eureka等服务发现工具集成,从而使得远程调用变得更加容易。 下面是使用OpenFeign进行远程调用的步骤: 1. 在pom.xml中添加OpenFeign依赖。 ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 2. 在启动类上添加@EnableFeignClients注解,启用Feign客户端。 ```java @SpringBootApplication @EnableFeignClients public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 3. 创建一个Feign客户端接口,在该接口上使用@FeignClient注解指定要调用的服务的名称。 ```java @FeignClient(name = "user-service") public interface UserServiceClient { @GetMapping("/users/{id}") User getUserById(@PathVariable("id") Long id); } ``` 4. 在业务代码中注入该Feign客户端接口,并调用其中的方法即可进行远程调用。 ```java @Service public class UserService { @Autowired private UserServiceClient userServiceClient; public User getUserById(Long id) { return userServiceClient.getUserById(id); } } ``` 以上就是使用OpenFeign进行远程调用的简单步骤。需要注意的是,Feign客户端接口中的方法定义必须与被调用的服务提供的接口方法一致,否则会出现方法调用失败的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值