OpenFeign - 介紹


springcloud出品,OpenFeign默認將Ribbon作為負載均衡器,直接內置了 Ribbon。在導入OpenFeign 依賴后無需專門導入Ribbon 依賴。

一、使用方法

1、引入openfeign:

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

2、在主程序類上添加注解 @EnableFeignClients:表示啟用 Feign 客戶端;

@SpringBootApplication
@EnableFeignClients
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class,args);
    }
}

3、定義用於調用服務提供者的 Feign 接口

@FeignClient("provider-instance-name") //標識服務為 feign 的客戶端
public interface ProviderFeignClient {
    //定義端點的路徑和動作
    @RequestMapping( 
            method= RequestMethod.GET,
            value="/providers/{providerId}",
            consumes="application/json")
    //定義傳入端點的參數,該方法可以由客戶端調用以觸發組織服務        
    Provider getProvider(@PathVariable("providerId") String providerId);
}

4、要是用 ProviderFeignClient 類,開發人員只需要自動裝配並使用它即可。

二、Openfeign常用配置

超時配置

feign:
  client:
    config:
      # 要調用服務的名稱
      stock-service: #如果是全局配置 則為 default
        # 設置日志記錄級別,其取值共有none、basic、headers、full
        loggerLevel: HEADERS
        # feign的配置優先於ribbon
        connectTimeout: 5000
        readTimeout: 5000

負載均衡策略配置

1、修改配置文件

stock-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

2、修改JavaConfig類

在 JavaConfig 類中添加負載 Bean 方法。全局所有feign對應服務都可以生效。

@Configuration
public class FeignConfiguration {
    /**
     * 配置隨機的負載均衡策略
     * 特點:對所有的服務都生效
     */
    @Bean
    public IRule loadBalancedRule() {
        return new RandomRule();
    }
}

三、定義攔截器

/**
 * 自定義feign攔截器
 */
public class CustomFeignInterceptor implements RequestInterceptor {
    Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public void apply(RequestTemplate requestTemplate) {
        //寫一些自己的邏輯 帶上token 什么之類的
        String access_token = UUID.randomUUID().toString();
        requestTemplate.header("Authorization",access_token);
        logger.info("feign攔截器!");
    }
}

注冊此攔截器

@Configuration
public class OpenFeignConfig {
    /**
     * 自定義feign攔截器
     * @return
     */
    @Bean
    public CustomFeignInterceptor customFeignInterceptor() {
        return new CustomFeignInterceptor();
    }
}

如果寫在配置類中,注入的形式則就是全局的攔截器,因為並沒有指定是為具體服務進行配置。

feign:
  client:
    config:
      stock-service: #服務名
        requestInterceptors:
          - com.gaby.cloud.order.interceptor.feign.CustomFeignInterceptor

 

如果寫在配置文件中指明了服務,則為具體的服務指定一個或者多個攔截器




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM