天天看點

Spring Cloud Feign 優雅的服務調用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>           

開啟服務

在啟動類上添加 @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();           

}

調用

在需要調用服務的地方使用 @AutoWired 注入該接口。調用其對應的方法

@Autowired

private UserServiceFeignClient userServiceFeignClient;

  • 基于 Feign 的優雅的接口調用方式

@GetMapping("teacher/user/{age}")

public User getAllUser(@PathVariable Integer age){

return userServiceFeignClient.getUser(age);           

Feign負載均衡

Feign中已經內建了Ribbon的負載均衡功能,預設情況下使用輪詢的規則,若想要自定義可以參考:Ribbon進行服務調用/負載均衡以及請求重試配置

Feign的配置

新版本的Feign支援配置檔案配置,常用的配置有日志級别的配置。開發環境下可以配置成最細膩級别的日志友善檢查問題

feign的配置

feign:

client:

config:
  SERVICE-PROVIDER:
    loggerLevel: FULL # NONE(預設選項), BASIC, HEADERS, FULL; 内容依次豐富、性能影響依次增大           

logging:

level:

cn.keats.service_consumer.feign.UserServiceFeignClient: debug
           

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用戶端           

之後通過 registerFeignClient 方法,以動态代理的形式生成接口的實作。讓我們得以調用

原文位址

https://www.cnblogs.com/keatsCoder/p/12435936.html