Skip to content

SpringCloudOpenfeign简单使用

920字约3分钟

javaspring分布式

2024-11-14

Spring Cloud Starter Openfeign 是 Spring Cloud 社区提供的一个开源项目,可以简化跨服务调用之间的编程模型。通过使用 OpenFeign,开发人员可以非常轻松地在 Spring Cloud 微服务架构中进行统一的服务调用控制,同时实现了一系列的高级功能,例如负载均衡、ricty 负载均衡算法、服务容错、网关服务连接故障恢复、服务链路追踪、集中负载均衡等。

使用Spring Cloud Starter OpenFeign的步骤如下:

在pom.xml中引入spring-cloud-starter-openfeign,如下:

 <dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-openfeign</artifactId> 
</dependency>

对于application.yaml或者application.properties配置文件的设置:

eureka:
    client:
        service-url:
            defaultZone: http://localhost:8761/

接下来创建Feign接口,并使用@FeignClient注解指定具体调的服务:

import org.springframework.cloud.openfeign.FeignClient; 

@FeignClient(value="order-service",fallback=OrderServiceFallback.class)
public interface OrderServiceFeign {
    public Order order(Order order);
}

到接下来为OrderServiceFeign接口实现Fallback回调,以避免远程服务失败的时候抛异常:

public class OrderServiceFallback implements Fallback(ProductServiceFeign){
public Order order(Order order){
    Order response = new Order();
    response.setCode(5);
    response.setMsg("OrderService error");
    return response;
}

最后配置OpenFeign的日志组件使用:

feign:
    client:
        config:
            default:
                loggerLevel: BLOCKING
                encode: gzip
    hystrix:
        enabled: true

这样project就配置好了OpenFeign和日志组件,下一步就是为服务提供者创建OrderServiceFeign的实现,以便完成服务间的调用。

在使用 Spring Cloud 开放式 Feign 客户端时,Spring Cloud Starter OpenFeign 是一个非常强大的工具,可以让您轻松实现RPC 及调用接口的追踪记录和监控。

一、Spring Cloud Starter OpenFeign 使用详解

Spring Cloud Starter OpenFeign 是一个基于 Spring Cloud 的 Feign ammenpaket,开箱即用的 Feign 负载均衡,无配置。可以轻松实现 ribbon 及 eureka 的集成,可以代替 ribbon 和 Feign 在 Spring Cloud 中的集成。OpenFeign 是一个声明式、动态、扩展性非常强的 HTTP 客户端,不用写遍 Rather,的依赖,而是使用注解实现服务的 calls in runtime。 依赖引入 pom.xml中引入spring-cloud-starter-openfeign,如下:

 <dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-openfeign</artifactId> 
</dependency>

## 二、启用日志

为了启用日志,您需要在 application.properties 或 application.yml 中添加如下配置:

application.properties:

​```properties
feign.client.enable: true
feign.client.config: 
  logging.level.org.springframework.cloud.openfeign: DEBUG
 feign.com.netflix.eureka.authorization.enabled: False

application.yml:

feign:
  client:
    enable: true
    config:
      logging.level.org.springframework.cloud.openfeign: DEBUG

feign:
  com.netflix.eureka.authorization.enabled: false

以上两种配置中的 feign.client.enable=true 就是启用 Feign 的客户端,而 feign.client.config 和 feign.com.netflix.eureka.authorization.enabled 是关于日志的设置。

三、实例

假设我们有一个服务提供者服务 Michele ,以及服务消费者服务 Merger ,为了实现服务之间的调用,我们可以创建一个 ribbon- Rule 用来设置实例的可用性检查、 负载均衡策略等,因为我们使用了Spring Cloud Starter OpenFeign,所以我们可以对 providers 上的服务接口实现增强,如下所示:

package com.springcloud.starter.openfeign.ribbon.service;

import com.springcloud.starter.openfeign.ribbon.domain.AnotherPerson;
import com.springcloud.starter.openfeign.ribbon.domain.Person;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@FeignClient(name = "michele")
public interface MicheleService {

  @PostMapping("/persons")
  Person addPerson(@RequestBody Person person);

  @GetMapping("/persons/{id}")
  Person getPerson(@PathVariable("id") Long id);

  @PostMapping("/anotherPersons")
  AnotherPerson saveAnotherPerson(@RequestBody AnotherPerson anotherPerson);

  @GetMapping("/anotherPersons/{id}")
  AnotherPerson getAnotherPerson(@PathVariable("id") Long id);
}

加了 @FeignClient 注解并指定了服务提供者的名称,我们可以使用Http和服务提供者交互。然后,我们只要在 application.yml 中配置了ribbon 集成,它会自动进行负载均衡处理,自动检查可用性并直接返回。

也可以指定请求方法的超时时间,线程池大小等配置等等,根据实际需求进行扩展。

总之,Spring Cloud Starter OpenFeign 是一个很强大的工具,可以轻松实现 RPC 以及调用接口的追踪记录和监控,可以在 Spring Cloud 项目中广泛应用。