前言
不知不覺,“微服務實戰系列”
已完成了六篇,每篇都聚焦一個主題,目的是便于各位盆友能夠快速、全面地接收和消化。
博主從服務注冊到服務監控,從服務路由到服務安全,從身份認證到加密技術均有涉獵。凡此均有關微服務設計和運行的的方方面面,不得不考慮。
行文至此,博主腦門突然閃現出一個靈感:
微服務架構好比一個大型
“部落”
,所謂見“微”
知大,不禁由衷感嘆一番。
這里有負責行政的,有負責交通的,有負責開戶的,有負責查證的,有負責安檢的,有負責監管的,有負責拉閘的,有負責限…的等等。
好了,博主帶著大家接著盤點微服務那些事兒
,前序文章已聚齊,歡迎三連,有求必應:
- 微服務實戰系列之Sentinel
- 微服務實戰系列之Token
- 微服務實戰系列之Nacos
- 微服務實戰系列之Gateway
- 微服務實戰系列之加密RSA
- 微服務實戰系列之簽名Sign
劇情進入新的境界,今晚我們該聊聊關于Feign
的前世今生了。
Q:什么是Feign
Fegin
是一個通過Java調用HTTP的客戶端。其靈感來自于Retrofit、JAXRS-2.0和WebSocket。Feign
的首要目標是降低調用HTTP服務的復雜性,而無需關心是否為RESTful。
官方文檔:spring-cloud-feign
官方代碼:spring-cloud-openfeign
一句話總結:Feign是一個的客戶端,基于此客戶端,我們可以調用異構型的http服務,而無需關心服務端是如何實現的
。
這不禁讓博主想到了WS,當初WS橫空初世的時候,口號無比響亮,效果異常出彩,贏得了世人眾多熱捧。無論什么人和事,簡單又純粹,自然就可愛。
實踐應用
1. Feign客戶端
/*** 用戶服務*/
@FeignClient(contextId = "userService", value ="com-user", fallbackFactory = UserFallbackFactory.class)
public interface ProxyUserService
{/*** 通過用戶名查詢用戶信息*/@GetMapping("/user/info/{username}")public T<User> getUser(@PathVariable("username") String username, @RequestHeader("from") String source);
}
2. 服務降級Factory
/*** 服務降級factory*/
@Component
public class UserFallbackFactory implements FallbackFactory<UserService>
{@Overridepublic UserService create(Throwable throwable){log.error("用戶服務調用失敗:{}", throwable.getMessage());return new UserService(){@Overridepublic T<User> getUserInfo(String username, String source){return T.fail(throwable.getMessage());}}}
}
3. 檢索服務
通過@FeignClient中的value值,可以檢索到相應的微服務com-user
,該名稱來自Nacos
服務注冊的名稱,必須保持一致。
/*** 用戶服務com-user*/
@RestController
@RequestMapping("/user")
public class UserController
{
@GetMapping("/info/{username}")public T<User> info(@PathVariable("username") String username){//TODO,此處省略...}
}
以上為Feign的核心代碼,博主大致做了簡單的介紹。當然還有其他配置, 比如日志管理、攔截器等,可以參見官方教程查閱。
結語
Feign可以幫助簡化 HTTP API 的調用,可以用于服務間調用,順便也集成了Hystrix。具備可這幾個特征,使其在微服務
中,占據一席之地。
至此本篇已完結,又該說再見了,各位盆友有空接著聊~