Spring Cloud Feign 优雅的服务调用

简介:

Spring Cloud Feign 优雅的服务调用

Fegin 是由NetFlix开发的声明式、模板化HTTP客户端,可用于SpringCloud 的服务调用。提供了一套更优雅、便捷的HTTP调用API,并且SpringCloud整合了Fegin、Eureka和Ribbon。使其使用更加简便。替换了之前使用RestTemplate进行硬编码方式的服务调用。

Feign组件入门

导入依赖

<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
AI 代码解读

开启服务
在启动类上添加 @EnableFeignClients 开启

@SpringBootApplication
@EnableFeignClients
public class ServiceConsumerApplication {}

写服务接口
在项目中创建一个文件夹用来管理Fegin的所有接口
可以按照服务提供者的名字进行二级分类
创建一个接口。这里我根据服务提供者的名称创建了一个 UserServiceFeignClient 的接口
接口上添加注解 @FeignClient("SERVICE-PROVIDER"),注解的默认值填写服务提供者的名字
复制提供者的Controller方法,注意不要遗漏类名上的地址
package cn.keats.service_consumer.feign;

import cn.keats.service_consumer.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;

/**

  • @Author: keats_coder
  • @Date: 2020/3/7
  • @Version 1.0
    */

@FeignClient("SERVICE-PROVIDER")
public interface UserServiceFeignClient {

@GetMapping("/api/v1/user/{age}")
User getUser(@PathVariable("age") Integer age);

/**
 * 用户列表
 * @return
 */
@GetMapping("/api/v1/users")
List<User> getUsers();
AI 代码解读

}

调用
在需要调用服务的地方使用 @AutoWired 注入该接口。调用其对应的方法

@Autowired
private UserServiceFeignClient userServiceFeignClient;

/**

  • 基于 Feign 的优雅的接口调用方式
    */

@GetMapping("teacher/user/{age}")
public User getAllUser(@PathVariable Integer age){

return userServiceFeignClient.getUser(age);
AI 代码解读

}

Feign负载均衡
Feign中已经集成了Ribbon的负载均衡功能,默认情况下使用轮询的规则,若想要自定义可以参考:Ribbon进行服务调用/负载均衡以及请求重试配置

Feign的配置
新版本的Feign支持配置文件配置,常用的配置有日志级别的配置。开发环境下可以配置成最细腻级别的日志方便检查问题

feign的配置

feign:
client:

config:
  SERVICE-PROVIDER:
    loggerLevel: FULL # NONE(默认选项), BASIC, HEADERS, FULL; 内容依次丰富、性能影响依次增大
AI 代码解读

logging:
level:

cn.keats.service_consumer.feign.UserServiceFeignClient: debug
AI 代码解读

Feign的执行原理
在Spring容器启动时,扫描到 @EnableFeignClients 注解。而该注解又导入了 FeignClientsRegistrar.class 这个类。该类定义了扫描所有添加 @FeignClient 注解的接口
FeignClientsRegistrar 实现了 Spring ImportBeanDefinitionRegistrar 类,用来导入自定义Bean。其中该方法主要用来导入Bean.
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {

this.registerDefaultConfiguration(metadata, registry); // 注册配置
this.registerFeignClients(metadata, registry);// 注册Feign客户端
AI 代码解读

}
之后通过 registerFeignClient 方法,以动态代理的形式生成接口的实现。让我们得以调用
原文地址https://www.cnblogs.com/keatsCoder/p/12435936.html

目录
打赏
0
0
0
0
19
分享
相关文章
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
53 6
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
88 5
|
3月前
|
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
66 5
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
210 1
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
15273 34
SpringCloud微服务之间使用Feign调用不通情况举例
SpringCloud微服务之间使用Feign调用不通情况举例
777 2
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
946 0
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
809 15
|
8月前
|
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
181 3
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等