偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

還在用 OpenFeign?來(lái)試試 SpringBoot3 中的這個(gè)新玩意!

網(wǎng)絡(luò) 通信技術(shù)
用過(guò) Spring Cloud 的小伙伴都知道,在 Spring Cloud 家族中,負(fù)責(zé)進(jìn)程間通信的,我們可以使用 RestTemplate 或者 OpenFeign(當(dāng)然也有其他方式如基于消息中間件的消息驅(qū)動(dòng)的微服務(wù)或者基于 gRPC 的調(diào)用等)。

年過(guò)完啦,松哥也已經(jīng)搬磚搬了三天了。

疫情放開(kāi)后,今年這個(gè)年格外的輕松愜意,心中一種特別壓抑的東西被除去了,新聞中看到各地游人如織、西安大唐不夜城游人摩肩接踵,真的好像回到了 2019 年一樣,朋友圈中也都是喜氣洋洋,生活還是很美好的。

好久沒(méi)發(fā)技術(shù)文章了,最近回到工作地,晚上有空又可以碼碼技術(shù)了,今天我們就來(lái)聊一個(gè) Spring Boot3 中的新鮮玩意,聲明式 HTTP 調(diào)用。

1. 由來(lái)

Spring Boot3 去年底就已經(jīng)正式發(fā)布,我也嘗了一把鮮,最近有空會(huì)和小伙伴們慢慢聊聊 Spring Boot3 都給我們帶來(lái)了哪些新東西。

今天我們就先來(lái)看看聲明式 HTTP 接口。

用過(guò) Spring Cloud 的小伙伴都知道,在 Spring Cloud 家族中,負(fù)責(zé)進(jìn)程間通信的,我們可以使用 RestTemplate 或者 OpenFeign(當(dāng)然也有其他方式如基于消息中間件的消息驅(qū)動(dòng)的微服務(wù)或者基于 gRPC 的調(diào)用等)。

RestTemplate 我們可以將之當(dāng)作一個(gè)普普通通的 HTTP 調(diào)用工具來(lái)對(duì)待,區(qū)別于其他的 HTTP 客戶端,RestTemplate 用來(lái)調(diào)用 RESTful 風(fēng)格的接口特別方便。

不過(guò),比 RestTemplate 更加方便的是 OpenFeign,通過(guò)接口聲明就可以實(shí)現(xiàn)遠(yuǎn)程調(diào)用,這些的具體用法松哥在之前的視頻中講過(guò),這里就不再贅述了。

以前我們想要用聲明式 HTTP 調(diào)用,需要通過(guò) OpenFeign 來(lái)實(shí)現(xiàn),這個(gè)需要第三方的依賴,從 Spring6 開(kāi)始(Spring Boot3),Spring 自己提供了類似的功能通過(guò) @HttpExchange 注解也能方便的實(shí)現(xiàn) 聲明式 HTTP 調(diào)用。以后跨服務(wù)調(diào)用又多了一個(gè)選擇。

2. 使用

接下來(lái)松哥通過(guò)一個(gè)案例來(lái)和小伙伴們演示一下 @HttpExchange 注解的具體玩法。

首先我們先創(chuàng)建一個(gè)普通的名為 server 的 Spring Boot 項(xiàng)目,這個(gè)普通的 Spring Boot 項(xiàng)目中只需要提供一個(gè)簡(jiǎn)單的測(cè)試接口即可,如下:

@RestController
public class HelloController {

@GetMapping("/server/hello")
public String hello(String name){
return "hello " + name;
}

}

這個(gè)對(duì)大家來(lái)說(shuō)應(yīng)該是沒(méi)什么難度的,我就不多說(shuō)了。

現(xiàn)在假設(shè)我有另外一個(gè)服務(wù)名為 client,我想在 client 中調(diào)用 server 中提供的這個(gè)接口。

首先我們來(lái)創(chuàng)建 client 這個(gè)項(xiàng)目,大家注意,創(chuàng)建的時(shí)候我們不僅需要添加 Web 依賴,還需要 Reactive Web,因?yàn)檫@個(gè) @HttpExchange 底層基于 WebClient,而 WebClient 則是 Reactive Web 提供的:

圖片

創(chuàng)建完成后,接下來(lái)我們就可以聲明 Http 接口了:

@HttpExchange("/server")
public interface ToDoService {
@GetExchange("/hello")
String hello(@RequestParam String name);
}

這些用法跟我們?cè)?SpringMVC 中常用的 @RequestMapping 和 @GetMapping 等特別類似:

  • @HttpExchange? 類似于 @RequestMapping,可以將之放在類上,起到一個(gè)請(qǐng)求窄化的作用,也可以放在方法上,放在方法上我們可以通過(guò) method 屬性來(lái)指定具體的請(qǐng)求方法,這個(gè)也跟 @RequestMapping 類似:@HttpExchange(value = "/server",method = "GET")。
  • @GetExchange? 類似于 @GetMapping,這個(gè)就不再贅述了,其他類似的注解還有 @DeleteExchange、@PatchExchange、@PostExchange、@PutExchange 等。
  • 另外需要注意的是請(qǐng)求方法的參數(shù)需要加上@RequestParam 注解,這一點(diǎn)和 OpenFeign 比較類似。

接口聲明好之后還沒(méi)完,我們還需要配置一下才能使用。如下:

@Configuration
public class WebConfig {
@Bean
WebClient webClient(){
return WebClient.builder()
.baseUrl("http://localhost:8080")
.build();
}
@Bean
ToDoService toDoService(){
HttpServiceProxyFactory httpServiceProxyFactory =
HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient()))
.build();
return httpServiceProxyFactory.createClient(ToDoService.class);
}
}

這個(gè)配置主要是兩方面:

  1. @HttpExchange? 是基于 WebClient 的,所以我們首先需要配置 WebClient,配置 WebClient 的時(shí)候,也順便配置了請(qǐng)求的具體地址(因?yàn)樵?nbsp;@HttpExchange 
  2. 由于我們前面提供的 ToDoService 是一個(gè)接口,所以我們還需要提供一個(gè)該接口的實(shí)現(xiàn)類,當(dāng)然這個(gè)配置完全是套路化模版化的,這塊就沒(méi)啥好說(shuō)了。

全部配置完成后,接下來(lái)我們就可以在任何需要的地方,直接注入 ToDoService 的實(shí)例去使用了,舉一個(gè)簡(jiǎn)單的例子小伙伴們參考下:

@SpringBootTest
class ClientApplicationTests {

@Autowired
ToDoService toDoService;

@Test
void contextLoads(){
String hello = toDoService.hello("javaboy");
System.out.println("hello = " + hello);
}

}

好啦,一個(gè)簡(jiǎn)單的例子,小伙伴們不妨體驗(yàn)下。

以后,不用 OpenFeign 也能實(shí)現(xiàn)聲明式服務(wù)調(diào)用啦~

責(zé)任編輯:武曉燕 來(lái)源: 江南一點(diǎn)雨
相關(guān)推薦

2025-10-28 01:45:00

setTimeouAPI日志

2025-09-18 08:33:44

2023-06-19 08:05:17

RFCwebSpring

2021-01-27 11:36:34

代碼開(kāi)發(fā)工具

2023-08-07 14:28:07

SpringBoot工具

2024-03-26 10:30:37

Mybatis擴(kuò)展庫(kù)API

2021-01-03 17:14:16

ORMObjective S運(yùn)行

2023-08-09 08:29:51

SpringWeb編程

2016-09-23 18:32:42

iTunesIOS 10蘋果

2021-04-21 10:36:47

StringBuildJava8StringJoine

2020-07-10 12:06:28

WebpackBundleless瀏覽器

2015-01-23 10:45:23

2020-07-29 10:55:07

數(shù)據(jù)庫(kù)工具技術(shù)

2024-10-08 08:26:43

2020-08-25 08:03:59

測(cè)試Sharness結(jié)構(gòu)

2023-08-11 08:59:49

分庫(kù)分表數(shù)據(jù)數(shù)據(jù)庫(kù)

2023-08-15 08:42:41

2012-07-19 10:03:32

2023-08-08 08:23:08

Spring日志?線程池

2024-09-11 09:15:06

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)