外观
SpringCloudOpenfeign简单使用
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 项目中广泛应用。