feign 是netflix 提供的申明式的httpclient調用框架
整合方法
1.添加依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2.在application 添加注解
@EnableFeignClients
3.編寫調用代碼
@FeignClient(name = "jpaas-form") public interface FormClient { /** * 根據表單別名獲取表單相關數據。 * @param alias * @param pk * @param initPermission * @return */ @GetMapping("/form/core/formPc/getByAlias") JsonResult<BpmView> getByAlias(@RequestParam(value = "alias") String alias, @RequestParam(value = "pk")String pk, @RequestParam(value = "initPermission") Boolean initPermission);
1.添加一個接口類。
2.增加@FeignClient 注解
name 指向需要調用的 微服務名稱
3.增加調用方法
遵循 mvc的寫法,如果返回的數據是一個java對象,最好把這個實體做成公共的類,供被調用者和調用者進行使用。
@GetMapping("/users/{id}")
UserDTO findById(@PathVariable Integer id);
方法示例,和spring mvc 差不多。
4.自定義FEIGN日志級別
feign 日志級別,就是需要打印feign的調用參數和響應數據。
使用java代碼來實現。
1.編寫配置類
import feign.Logger; import org.springframework.context.annotation.Bean; public class UserCenterFeignClientConfig { @Bean public Logger.Level level(){ return Logger.Level.FULL; } }
2.feign client 類指定配置
@FeignClient(name = "user-center", // fallback = UserCenterFeignClientFallback.class, // fallbackFactory = UserCenterFeignClientFallbackFactory.class, configuration = UserCenterFeignClientConfig.class ) public interface UserCenterFeignClient {
3.在日志中進行指定
編輯 application.yml
logging: level: com.demo.contentcenter.feignclient.UserCenterFeignClient: debug
注意這個日志界別需要為 debug 級別,只有在debug模式才會輸出feign日志。
4. feign 多參數請求實現
請參考文章
http://www.imooc.com/article/289000
5.使用 feign 訪問非 注冊服務數據
有些情況下,我們使用feign 訪問外部url,比如訪問 博客網首頁。
編寫代碼:
@FeignClient(name = "cnblogs", url = "https://www.cnblogs.com")
public interface ExternalFeignClient {
@GetMapping("/yg_zhang")
String index();
}
這里需要指定 name 和URL地址。
6.性能優化
配置啟用http連接池:
<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-httpclient</artifactId> <version>10.2.3</version> </dependency>
修改 application.yml
feign: client: config: # 全局配置 default: loggerLevel: basic httpclient: enabled: true max-connections: 200 max-connections-per-route: 50
7.feign 的常見問題
http://www.imooc.com/article/289005