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
如果寫在配置文件中指明了服務,則為具體的服務指定一個或者多個攔截器