還在用 OpenFeign?來試試 SpringBoot3 中的這個新玩意!
年過完啦,松哥也已經搬磚搬了三天了。
疫情放開後,今年這個年格外的輕鬆愜意,心中一種特別壓抑的東西被除去了,新聞中看到各地遊人如織、西安大唐不夜城遊人摩肩接踵,真的好像回到了 2019 年一樣,朋友圈中也都是喜氣洋洋,生活還是很美好的。
好久沒發技術文章了,最近回到工作地,晚上有空又可以碼碼技術了,今天我們就來聊一個 Spring Boot3 中的新鮮玩意,宣告式 HTTP 呼叫。
1. 由來
Spring Boot3 去年底就已經正式釋出,我也嚐了一把鮮,最近有空會和小夥伴們慢慢聊聊 Spring Boot3 都給我們帶來了哪些新東西。
今天我們就先來看看宣告式 HTTP 介面。
用過 Spring Cloud 的小夥伴都知道,在 Spring Cloud 家族中,負責程式間通訊的,我們可以使用 RestTemplate 或者 OpenFeign(當然也有其他方式如基於訊息中介軟體的訊息驅動的微服務或者基於 gRPC 的呼叫等)。
RestTemplate 我們可以將之當作一個普普通通的 HTTP 呼叫工具來對待,區別於其他的 HTTP 客戶端,RestTemplate 用來呼叫 RESTful 風格的介面特別方便。
不過,比 RestTemplate 更加方便的是 OpenFeign,透過介面宣告就可以實現遠端呼叫,這些的具體用法松哥在之前的影片中講過,這裡就不再贅述了。
以前我們想要用宣告式 HTTP 呼叫,需要透過 OpenFeign 來實現,這個需要第三方的依賴,從 Spring6 開始(Spring Boot3),Spring 自己提供了類似的功能透過 @HttpExchange
註解也能方便的實現 宣告式 HTTP 呼叫。以後跨服務呼叫又多了一個選擇。
2. 使用
接下來松哥透過一個案例來和小夥伴們演示一下 @HttpExchange
註解的具體玩法。
首先我們先建立一個普通的名為 server 的 Spring Boot 專案,這個普通的 Spring Boot 專案中只需要提供一個簡單的測試介面即可,如下:
@RestController
public class HelloController {
@GetMapping("/server/hello")
public String hello(String name) {
return "hello " + name;
}
}
這個對大家來說應該是沒什麼難度的,我就不多說了。
現在假設我有另外一個服務名為 client,我想在 client 中呼叫 server 中提供的這個介面。
首先我們來建立 client 這個專案,大家注意,建立的時候我們不僅需要新增 Web 依賴,還需要 Reactive Web,因為這個 @HttpExchange
底層基於 WebClient,而 WebClient 則是 Reactive Web 提供的:
建立完成後,接下來我們就可以宣告 Http 介面了:
@HttpExchange("/server")
public interface ToDoService {
@GetExchange("/hello")
String hello(@RequestParam String name);
}
這些用法跟我們在 SpringMVC 中常用的 @RequestMapping 和 @GetMapping 等特別類似:
@HttpExchange
類似於@RequestMapping
,可以將之放在類上,起到一個請求窄化的作用,也可以放在方法上,放在方法上我們可以透過 method 屬性來指定具體的請求方法,這個也跟@RequestMapping
類似:@HttpExchange(value = "/server",method = "GET")
。@GetExchange
類似於@GetMapping
,這個就不再贅述了,其他類似的註解還有@DeleteExchange
、@PatchExchange
、@PostExchange
、@PutExchange
等。另外需要注意的是請求方法的引數需要加上 @RequestParam
註解,這一點和 OpenFeign 比較類似。
介面宣告好之後還沒完,我們還需要配置一下才能使用。如下:
@Configuration
public class WebConfig {
@Bean
WebClient webClient() {
return WebClient.builder()
.baseUrl(")
.build();
}
@Bean
ToDoService toDoService() {
HttpServiceProxyFactory httpServiceProxyFactory =
HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient()))
.build();
return httpServiceProxyFactory.createClient(ToDoService.class);
}
}
這個配置主要是兩方面:
@HttpExchange
是基於 WebClient 的,所以我們首先需要配置 WebClient,配置 WebClient 的時候,也順便配置了請求的具體地址(因為在@HttpExchange
註解中並未指定請求的具體域名埠啥的);同時,對於 HTTP 請求頭等如果需要定製,也是透過配置 WebClient 來實現的。由於我們前面提供的 ToDoService 是一個介面,所以我們還需要提供一個該介面的實現類,當然這個配置完全是套路化模版化的,這塊就沒啥好說了。
全部配置完成後,接下來我們就可以在任何需要的地方,直接注入 ToDoService 的例項去使用了,舉一個簡單的例子小夥伴們參考下:
@SpringBootTest
class ClientApplicationTests {
@Autowired
ToDoService toDoService;
@Test
void contextLoads() {
String hello = toDoService.hello("javaboy");
System.out.println("hello = " + hello);
}
}
好啦,一個簡單的例子,小夥伴們不妨體驗下。
以後,不用 OpenFeign 也能實現宣告式服務呼叫啦~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024922/viewspace-2933722/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 你還在用Kettle嗎?試試這款ETL工具
- 還在用nohup? 來試試Supervisor吧 -Linux後臺執行Linux
- 還在用AIDL嗎?試試EasyMessenger吧AIMessenger
- 還在用Jenkins?試試Gitlab的CI/CD功能吧JenkinsGitlab
- 你還在用 Prometheus 監控 K8S?快試試這 6 個更牛逼的替代方案PrometheusK8S
- 還在用 RedisTemplate?試試 Redis 官方 ORM 框架吧,用起來夠優雅!RedisORM框架
- 還在用 Redux,要不要試試 GraphQL 和 Apollo?Redux
- 還在用Swagger?試試這款零註解侵入的API文件生成工具,跟Postman絕配!SwaggerAPIPostman
- 還在用HttpUtil?試試這款優雅的HTTP客戶端工具吧,跟SpringBoot絕配!HTTP客戶端Spring Boot
- 還在用迭代器處理集合嗎?試試Stream,真香
- 還在用shape、selector,試試自定義圓角元件吧元件
- 你還在用分頁?試試 MyBatis 流式查詢,真心強大!MyBatis
- Linux 新使用者?來試試這 8 款重要的軟體Linux
- 邦芒面試:這10個問題都答不上來,你還想透過面試?面試
- 還在用命令列監控伺服器?試試這款監控工具吧,直觀又易用!命令列伺服器
- Java原來還可以這麼學:如何搞定面試中必考的集合類Java面試
- 面試官寫了個雙冒號: : 問我這是什麼語法?Java中有這玩意?面試Java
- 我來試試這個部落格是否能發帖
- Mac電腦中重複檔案太多,不能很快查詢出來?試試這個Mac
- 原來我也可以這麼優秀(一)一個簡單的極限測試(還在修訂中)
- 還在擔心報表不好做?不用怕,試試這個方法(二)
- 還在擔心報表不好做?不用怕,試試這個方法(四)
- 還在擔心報表不好做?不用怕,試試這個方法(三)
- Mac上檔案太多找起來很麻煩?試試這個Mac
- 網路協議之:還在用HTTP代理?弱爆了!快試試SOCKS5協議HTTP
- 金融資料分析還能這樣做?快試試這個BI工具小白也能學會!
- 你的ABAP程式給佛祖開過光麼?來試試Jerry這個小技巧
- Spring Cloud OpenFeign 超時與重試SpringCloud
- 面試官寫了個雙冒號::問我是什麼語法,Java中有這玩意麼?面試Java
- 面試還問這些?甩手就給個讓他僵住的答案!面試
- 【搞定面試官】你還在用Executors來建立執行緒池?會有什麼問題呢?面試執行緒
- MySQL中這14個小玩意,讓人眼前一亮!!!MySql
- 這是個測試
- 面試中的這些坑,你踩過幾個?面試
- 哎,被這個叫做at least once的玩意坑麻了。AST
- 一個沉重的問題:未來已來,軟體測試還有價值嗎?
- SpringBoot3中15個案例原始碼Spring Boot原始碼
- 想使您的Mac保持清醒狀態?試試這個Mac