Feign?Feign 是什么?
十年的河南網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網站建設的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整河南建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“河南網站設計”,“河南網站推廣”以來,每個客戶項目都認真落實執(zhí)行。
🙊Feign 是一個聲明式的 http 客戶端, 其主要的作用就是幫助我們實現(xiàn) http 的請求發(fā)送, 正如官網所說, Feign使編寫Java http客戶端更容易;
??為什么要用 Feign?
🙊🙊如在未學習 Feign 之前, 我們利用的是 RestTemplate 進行發(fā)起遠程的調用, 如下面的代碼所示:String url = "http://providerservice/provider/" + consumer.getProviderId();
Provider provider = restTemplate.getForObject(url, Provider.class);
先寫出 url 路徑, 然后再利用 RestTemplate 發(fā)送 http 請求, 實現(xiàn)遠程的調用; 通過代碼也可以看出來這樣的方式存在代碼可讀性比較差, 編程體驗不是很好, 并且參數(shù)比較復雜, URL 不容易維護, 而 Feign 就是為了解決這個問題而生;
???為什么選擇 Feign?
🙊🙊🙊關于為什么要選擇 Feign, 如下圖官網所說: Feign 這個工具啊和 Jersey 和 CXF 一樣都是利用了 ReST 或者 SOAP 工具, 但是呢 Feign 允許我們程序猿在 http 庫里面自行寫代碼, 就像 Apache HC 一樣, 通過可定制的解碼器和錯誤處理方式將您的代碼連接到http API,可以寫入任何基于文本的http API, 并且開銷和代碼量是最少得.
步驟一: 引入 Feign 客戶端依賴;
org.springframework.cloud spring-cloud-starter-openfeign
步驟二: 在 consumer-service 的啟動類中添加注解 @EnableFeignClients 來開啟 Feign 的功能;
步驟三: 開始編寫 Feign 客戶端;
我這里是新建了一個 feign 包, 然后在 clients 中聲明遠程調用的信息, 這里也是基于 Spring 的注解;
@FeignClient("providerservice") // 服務名稱
public interface ProviderClient {@GetMapping("/provider/{id}") // 請求方式及路徑
provider findById(@PathVariable("id") Long id);
}
步驟四: 使用 Feign 客戶端來進行發(fā)送請求;
對比: 通過代碼數(shù)量就可以看得出簡單了很多!
@Service
public class ConsumerService {@Resource
private ConsumerMapper consumerMapper;
@Resource
private ConsumerClient consumerClient;
public Consumer queryOrderById(Long consumerId) {// 1. 查詢訂單
Consumer consumer = consumerMapper.findById(consumerId);
// 2. 用 Feign 遠程調用
Provider provider = consumerClient.findById(consumer.getProviderId());
// 3. 封裝 user 到 Order
consumer.setProvider(provider);
// 4.返回
return consumer;
}
}
2 自定義使用 Feign通常還會自定義一些配置來覆蓋其默認的配置, 如常用的修改日志的配置; 如下圖便是某些配置修改的類型及說明:
關于具體使用我們以配置 Feign 日志為例子進行說明.
方式一: 文件配置方式;
這里的 default 就是全局配置, 如果寫的是 consumerservice 則就是對此服務的配置, FULL 為日志級別;
方式二: 使用 java 代碼方式; 在 feign 包中加入 config 類, 添加相關的配置; 注意這里要聲明一下 bean;
public class DefaultFeignConfiguration {@Bean
public Logger.Level logLevel() {return Logger.Level.BASIC;
}
}
如果是全局配置, 則放在 @EnableFeignClients 這個注解里面:
如果是局部配置, 就放在 @FeignClient 這個注解中;
@FeignClient(value = "providerservice", configuration = FeignClientsConfiguration.class)
public interface ProviderClient {@GetMapping("/provider/{id}")
Provider findById(@PathVariable("id") Long id);
}
3 Feign 性能優(yōu)化關于 Feign 的優(yōu)化主要體現(xiàn)在使用連接池代替默認的 URLConnection, 其次在日志設置要日志級別最好設置為 BASIC 或者是 NONE;
配置連接池方式:
步驟一: consumerservice 中引入 httpClient 依賴;
io.github.openfeign feign-httpclient
步驟二: 配置連接池;
方式一: 將消費者的 FeignClient 和 提供者的 controller 定義統(tǒng)一的父接口作為標準, 這樣可以使得服務緊密耦合, 父接口參數(shù)列表中的映射也不會被繼承; 如下圖所示:
方式二 (推薦): 將 Feign 客戶端當作業(yè)一個獨立的模塊, 并把所有的配置(如日志級別的配置) / 接口相關的信息等都放在這個模塊中, 其實上面我們做的工作就是將 feign 當做一個模塊來處理的, 這樣可以提供給所有的消費者去使用;
具體步驟:
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧