精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot有關遠程服務調用的細節詳解(阻塞與非阻塞)

開發 前端
為了使任何定制的范圍盡可能窄,注入自動配置的WebClient.Builder,然后根據需要調用它的方法。WebClient.Builder實例是有狀態的:builder上的任何更改都反映在隨后用它創建的所有client上。如果你想用同一個builder創建多個客戶端,你也可以考慮用WebClient.Builder other = builder.clone()。

環境:Springboot2.6.14

如果你的應用程序調用遠程REST服務,Spring Boot使用RestTemplate或WebClient使之非常的方便。

RestTemplate

如果需要從應用程序調用遠程REST服務,可以使用Spring框架的RestTemplate類。由于RestTemplate實例通常需要在使用之前進行自定義,Spring Boot不提供任何單個自動配置的RestTemplate bean。但是,它可以自動配置一個RestTemplateBuilder,在需要時可以使用它創建RestTemplate實例。自動配置的RestTemplateBuilder確保合理的HttpMessageConverters應用于RestTemplate實例。

以下代碼顯示了一個典型示例:?

@Service
public class RemoteService {


private final RestTemplate restTemplate ;


public RemoteService(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.build() ;
}


public Details storageService(Long storageId, Integer count) {
return this.restTemplate.getForObject("http://localhost:8080/storage/deduct/{storageId}/{count}", Boolean.class, storageId, count) ;
}
}

RestTemplateBuilder包括許多可用于快速配置RestTemplate的有用方法。例如,要添加BASIC身份驗證支持,可以使用
builder.basicAuthentication("admin","123").build()

自定義RestTemplate

RestTemplate定制有三種主要方法,這取決于你希望定制應用的范圍。

要使任何自定義的范圍盡可能窄,請注入自動配置的RestTemplateBuilder,然后根據需要調用其方法。每個方法調用都返回一個新的RestTemplateBuilder實例,因此自定義僅影響當前builder的使用。

要進行應用程序范圍的附加定制,請使用RestTemplateCustomizer bean。所有這樣的bean都會自動注冊到自動配置的RestTemplateBuilder中,并應用于使用它構建的任何模板。

自動配置如下:

public class RestTemplateAutoConfiguration {
@Bean
@Lazy
@ConditionalOnMissingBean
public RestTemplateBuilder restTemplateBuilder(RestTemplateBuilderConfigurer restTemplateBuilderConfigurer) {
RestTemplateBuilder builder = new RestTemplateBuilder();
return restTemplateBuilderConfigurer.configure(builder);
}
}

自定義配置

public class CustomRestTemplateCustomizer implements RestTemplateCustomizer {


@Override
public void customize(RestTemplate restTemplate) {
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
}
}

最后,可以定義自己的RestTemplateBuilder bean。這樣做將替換自動配置的RestTemplateBuilder。如果你希望任何RestTemplateCustomizer bean應用于你的自定義Builder,就像自動配置所做的那樣,使用RestTemplateBuilderConfigurer對其進行配置。下面的例子公開了一個RestTemplateBuilder,它與Spring Boot的自動配置相匹配,只是還指定了自定義連接和讀取超時:?

@Configuration(proxyBeanMethods = false)
public class CustomRestTemplateBuilderConfiguration {


@Bean
public RestTemplateBuilder restTemplateBuilder(RestTemplateBuilderConfigurer configurer) {
return configurer.configure(new RestTemplateBuilder()).setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(2));
}
}

默認SpringBoot提供有RestTemplateBuilderConfigurer?

public class RestTemplateAutoConfiguration {


@Bean
@Lazy
@ConditionalOnMissingBean
public RestTemplateBuilderConfigurer restTemplateBuilderConfigurer(
ObjectProvider<HttpMessageConverters> messageConverters,
ObjectProvider<RestTemplateCustomizer> restTemplateCustomizers,
ObjectProvider<RestTemplateRequestCustomizer<?>> restTemplateRequestCustomizers) {
RestTemplateBuilderConfigurer configurer = new RestTemplateBuilderConfigurer();
configurer.setHttpMessageConverters(messageConverters.getIfUnique());
configurer.setRestTemplateCustomizers(restTemplateCustomizers.orderedStream().collect(Collectors.toList()));
configurer.setRestTemplateRequestCustomizers(restTemplateRequestCustomizers.orderedStream().collect(Collectors.toList()));
return configurer;
}
}

使用系統默認的RestTemplateBuilderConfigurer是個明智選擇,它合理配置了系統提供的默認HttpMessageConverters。

最極端(也很少使用)的選項是在不使用配置程序的情況下創建自己的RestTemplateBuilder bean。除了替換自動配置的構建器之外,這還可以防止使用任何RestTemplateCustomizer bean。

WebClient

如果你的類路徑上有Spring WebFlux,你也可以選擇使用WebClient來調用遠程REST服務。與RestTemplate相比,這個客戶端具有更強的功能性,并且是完全響應式的。

Spring Boot創建并預配置WebClient.Builder。強烈建議將它注入到組件中,并使用它創建WebClient實例。Spring Boot正在配置該構建器以共享HTTP資源,以與服務器相同的方式反映編解碼器設置,等等。

以下代碼顯示了一個典型示例:?

@Service
public class WebClientService {


private final WebClient webClient;


public WebClientService(WebClient.Builder webClientBuilder) {
this.webClient = webClientBuilder.baseUrl("http://localhost:8080").build() ;
}
public Mono<Details> storageService(Long storageId, Integer count) {
return this.webClient.get().uri("/storage/deduct/{storageId}/{count}", storageId, count).retrieve().bodyToMono(Boolean.class) ;
}
}

WebClient運行時

Spring Boot將自動檢測使用哪個ClientHttpConnector來驅動WebClient,這取決于應用程序類路徑上可用的庫。目前支持Reactor Netty、Jetty RS客戶端和Apache HttpClient。

源碼?

public interface WebClient {
static WebClient.Builder builder() {
return new DefaultWebClientBuilder();
}
}
final class DefaultWebClientBuilder implements WebClient.Builder {
private static final boolean reactorClientPresent;
private static final boolean jettyClientPresent;
private static final boolean httpComponentsClientPresent;
static {
ClassLoader loader = DefaultWebClientBuilder.class.getClassLoader();
reactorClientPresent = ClassUtils.isPresent("reactor.netty.http.client.HttpClient", loader);
jettyClientPresent = ClassUtils.isPresent("org.eclipse.jetty.client.HttpClient", loader);
httpComponentsClientPresent =
ClassUtils.isPresent("org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient", loader) &&
ClassUtils.isPresent("org.apache.hc.core5.reactive.ReactiveDataConsumer", loader);
}
public WebClient build() {
ClientHttpConnector connectorToUse = (this.connector != null ? this.connector : initConnector());
// ...
return new DefaultWebClient(...) ;
}
private ClientHttpConnector initConnector() {
if (reactorClientPresent) {
return new ReactorClientHttpConnector();
} else if (jettyClientPresent) {
return new JettyClientHttpConnector();
} else if (httpComponentsClientPresent) {
return new HttpComponentsClientHttpConnector();
}
throw new IllegalStateException("No suitable default ClientHttpConnector found");
}
}

spring-boot-starter-webflux啟動器默認依賴于io.projectreactor.netty:reactor-netty,它帶來了服務器和客戶端實現。如果選擇使用Jetty作為響應式服務器,則應該在Jetty響應式HTTP客戶端庫上添加一個依賴項。對服務器和客戶端使用相同的技術有其優點,因為它將自動在客戶端和服務器之間共享HTTP資源。

開發人員可以通過提供自定義的ReactorResourceFactory或JettyResourceFactory bean來覆蓋Jetty和Reactor Netty的資源配置——這將應用于客戶端和服務器。

如果你希望覆蓋客戶端的選擇,可以定義自己的ClientHttpConnector bean并完全控制客戶機配置。

WebClient自定義

WebClient定制主要有三種方法,具體取決于你希望定制應用的范圍。

為了使任何定制的范圍盡可能窄,注入自動配置的WebClient.Builder,然后根據需要調用它的方法。WebClient.Builder實例是有狀態的:builder上的任何更改都反映在隨后用它創建的所有client上。如果你想用同一個builder創建多個客戶端,你也可以考慮用WebClient.Builder other = builder.clone();

對所有WebClient進行應用程序范圍的附加定制WebClient.Builder實例,你可以聲明WebClientCustomizer

最后,你可以使用原始API:WebClient.create()。在這種情況下,不會應用自動配置或WebClientCustomizer。

責任編輯:武曉燕 來源: 實戰案例錦集
相關推薦

2021-06-04 18:14:15

阻塞非阻塞tcp

2018-03-28 08:52:53

阻塞非阻塞I

2012-10-10 10:00:27

同步異步開發Java

2018-01-11 08:24:45

服務器模型詳解

2019-07-23 11:01:57

Python同步異步

2017-03-01 16:40:12

Linux驅動技術設備阻塞

2012-02-22 21:15:41

unixIO阻塞

2011-12-08 10:12:34

JavaNIO

2024-12-02 00:57:17

非阻塞異步編程

2015-07-03 10:12:04

編程同步非阻塞

2023-12-06 07:28:47

阻塞IO異步IO

2024-09-23 17:15:28

Python并發并行

2025-10-09 05:11:00

I/O模型非阻塞socket

2022-06-22 08:16:29

異步非阻塞框架

2021-02-27 16:08:17

Java異步非阻塞

2012-05-29 15:17:08

JavaWMIC

2025-05-15 04:00:55

2022-09-22 10:51:32

服務端開發者異步非阻塞編程

2011-12-07 17:17:02

JavaNIO

2023-07-31 08:55:01

Java NIO非阻塞阻塞
點贊
收藏

51CTO技術棧公眾號

欧美日韩一区在线观看| 国产清纯在线一区二区www| 欧美日韩成人黄色| 国产乱了高清露脸对白| 国产91精品在线| 亚洲精品伦理在线| 蜜桃视频日韩| 国产精品无码天天爽视频| 亚洲三级色网| 精品国偷自产在线视频| 欧美熟妇精品一区二区蜜桃视频| 天天综合网站| 亚洲一区二区欧美激情| 日韩久久不卡| 少妇高潮一区二区三区99小说| 奇米影视在线99精品| 欧美日韩国产成人在线| 欧美亚洲色综久久精品国产| 97久久综合区小说区图片区| 欧美色倩网站大全免费| 欧美亚洲日本一区二区三区| 欧美性videos| 久久精品夜色噜噜亚洲aⅴ| 96国产粉嫩美女| 久久久久久久亚洲| 99精品免费| 欧美精品在线免费播放| 韩国三级hd中文字幕| 成人台湾亚洲精品一区二区| 欧美日韩国产一二三| av免费在线播放网站| jizz一区二区三区| 一区二区三区在线视频免费 | 亚洲欧美黄色片| 捆绑调教美女网站视频一区| 热re99久久精品国产66热| 久久亚洲av午夜福利精品一区| 日韩免费在线| 伊人av综合网| 在线小视频你懂的| 夜夜春成人影院| 日韩精品在线播放| 性色av蜜臀av浪潮av老女人| 丁香一区二区| 亚洲第一偷拍网| 久久人妻少妇嫩草av蜜桃| 国产精品一区二区精品视频观看| 欧美精品第1页| 三年中国国语在线播放免费| 久九九久频精品短视频| 狠狠色狠狠色综合日日小说| 成人性免费视频| 美女精品导航| 婷婷国产在线综合| 无码人妻丰满熟妇区96| 成人免费网站视频| 色婷婷一区二区三区四区| www.四虎成人| 国产精品videossex撒尿| 欧美性xxxxxx少妇| www.国产视频.com| 免费看日产一区二区三区 | 国产成人精品综合| 国产精品无码一区| 久久精品国产99久久6| 成人中文字幕在线观看| 国产欧美一区二区三区视频在线观看| 韩国三级在线一区| 97在线资源站| 奇米影视888狠狠狠777不卡| 久久精品综合网| 影音先锋欧美在线| 青青草原国产在线| 一本一道波多野结衣一区二区| 污污视频网站免费观看| 成人国产精品入口免费视频| 91精品国产一区二区三区蜜臀| 日韩大尺度视频| 神马久久影院| 日韩在线不卡视频| 国产在线观看免费av| 久久精品男女| 91久久精品国产91久久性色| 亚洲av无码一区二区乱子伦| 99riav一区二区三区| 日本一区二区三区免费观看| a天堂中文在线官网在线| 亚洲午夜久久久久久久久电影网 | 中国老女人av| 国产美女精品写真福利视频| 欧美影院一区二区| 国产不卡的av| 亚洲影院天堂中文av色| 久久视频精品在线| 91九色丨porny丨肉丝| 蜜桃一区二区三区在线观看| 国产精品99久久久久久久| 国产中文在线| 一区二区高清在线| 福利在线一区二区三区| 国产精品调教| 久久精品99久久久香蕉| 中文字幕第15页| 精品亚洲porn| 青青成人在线| av免费在线视| 91精品在线麻豆| www.狠狠爱| 亚洲黄页一区| 亚洲精品欧美极品| 国产h在线观看| 天天色综合天天| 苍井空张开腿实干12次| 四虎成人av| 国产不卡av在线| 天堂av2024| 亚洲午夜视频在线| 亚洲成人av免费观看| 欧美日韩国产传媒| 欧洲日本亚洲国产区| 超碰在线播放97| 亚洲天堂免费在线观看视频| 成年网站在线免费观看| 第四色中文综合网| 色综合久久88| va视频在线观看| 亚洲天堂免费看| 亚洲视频一二三四| 成人在线国产| 国产成人精品在线播放| 欧美套图亚洲一区| 欧美丝袜美女中出在线| 国产精品麻豆入口| 黑人一区二区| av一区二区三区四区电影| 免费黄色在线| 欧美日韩精品电影| 五月天婷婷丁香网| 免费在线视频一区| 亚洲欧美日韩综合一区| 九色成人搞黄网站| 日韩在线视频观看正片免费网站| 91porny九色| 国产午夜亚洲精品理论片色戒| 国产成人a亚洲精v品无码| 国产劲爆久久| 97色在线视频观看| 日韩二区三区| 色婷婷综合视频在线观看| 亚洲天堂久久新| 视频一区视频二区在线观看| 欧美一区二区三区四区五区六区| 欧洲一区二区三区精品| 亚洲天堂第二页| 性高潮视频在线观看| 国产日韩欧美麻豆| 一起操在线视频| 最新欧美人z0oozo0| 成人三级在线| 蜜桃视频m3u8在线观看| 亚洲天堂免费在线| 亚洲视频中文字幕在线观看| 一区精品在线播放| 成年人性生活视频| 亚洲久久一区| 日本视频一区二区在线观看| 欧美成人家庭影院| 九九九久久国产免费| 鲁鲁狠狠狠7777一区二区| 成人不卡免费av| 欧美男男青年gay1069videost| www.啪啪.com| 国产精品主播| 日本在线高清视频一区| 亚洲高清国产拍精品26u| 欧美成人性色生活仑片| 蜜桃久久一区二区三区| 欧美日韩国产中字| 婷婷色一区二区三区| 国内成+人亚洲+欧美+综合在线| 中文字幕在线乱| 日本欧美高清| 国产精品中文字幕在线观看| 91精选在线| 亚洲精品中文字幕av| 中文字幕一区二区三区人妻四季| 一区二区三区美女视频| 亚洲天堂视频一区| 国产伦精品一区二区三区免费| 国产高清av在线播放| 欧洲杯什么时候开赛| 91蜜桃网站免费观看| 芒果视频成人app| 欧美人与性动交| 免费在线稳定资源站| 欧美岛国在线观看| 亚洲国产精品无码久久久| 亚洲同性同志一二三专区| 超碰97在线资源站| 极品少妇xxxx偷拍精品少妇| 缅甸午夜性猛交xxxx| 久久在线电影| 国产一区免费在线观看| japansex久久高清精品| 日本午夜在线亚洲.国产| 91国内在线| 在线色欧美三级视频| 女人18毛片一区二区三区| 欧美日韩国产精品一区二区三区四区 | 国产欧美日韩三级| av漫画在线观看| 国内精品国产三级国产a久久| 欧美黄网站在线观看| 欧美 日韩 国产精品免费观看| 日韩成人av网站| 日韩高清三区| 国产精品久久波多野结衣| 伊人国产精品| 国产美女搞久久| 亚洲一区站长工具| 性色av一区二区三区免费| 免费av毛片在线看| 最近日韩中文字幕中文| 黑人与亚洲人色ⅹvideos | 欧美激情一区二区三区p站| 久久99精品国产.久久久久| 日本a√在线观看| 美女视频一区免费观看| www.av毛片| 亚洲福利久久| 国产日本在线播放| 影音先锋中文字幕一区| 亚洲av首页在线| 五月天激情综合网| 在线观看欧美激情| 久久视频精品| 在线免费一区| 91精品啪在线观看国产81旧版| 亚洲高清视频一区二区| 欧美日韩中文一区二区| 日韩欧美一区二区三区四区五区| 中文字幕亚洲影视| 日本精品二区| 日本在线电影一区二区三区| 亚洲欧洲日韩综合二区| 日本欧美视频| 夜夜爽99久久国产综合精品女不卡 | 天天做天天爱天天高潮| 亚洲精品国产偷自在线观看| 中文字幕在线观看一区二区三区| 日韩国产综合| 免费观看黄色的网站| 91成人观看| 青青草综合视频| 欧美网站在线| 水蜜桃色314在线观看| 亚洲作爱视频| 久久精品视频91| 麻豆精品视频在线| 国产高清av片| 成人深夜在线观看| 波多野结衣视频播放| 久久久亚洲国产美女国产盗摄 | 精品99久久| 一区二区三区视频| 欧美激情日韩| 又粗又黑又大的吊av| 久久九九电影| 亚洲精品视频三区| 成人亚洲一区二区一| www.自拍偷拍| 国产精品久久一级| 欧美三级小视频| 精品国产乱码久久久久久天美| 999这里只有精品| 欧美日韩午夜在线视频| 精品国产av 无码一区二区三区 | 欧美一区二区免费在线观看| 久久在线免费观看| 中文字幕在线有码| 婷婷国产在线综合| 91影院在线播放| 亚洲精品一区二区三区香蕉| 国产精品一级伦理| 欧美激情视频给我| 依依综合在线| 91热精品视频| 九九综合九九| 日韩视频一二三| 久久中文在线| 亚洲午夜精品在线观看| 久久久久99精品一区| 手机在线免费看片| 一本高清dvd不卡在线观看 | 亚洲欧美日韩成人| av在线看片| 国产99久久精品一区二区 夜夜躁日日躁 | 日本激情在线观看| 4p变态网欧美系列| 国产在线视频欧美一区| 日韩精品在在线一区二区中文| 欧美日本中文| 玖玖爱视频在线| 国产午夜亚洲精品理论片色戒| 久久亚洲AV无码| 制服丝袜在线91| 国产一二在线观看| 国内精品久久久久影院 日本资源| 黄色成人在线视频| 久久综合久久久| 激情欧美丁香| 欧美又黄又嫩大片a级| 国产欧美中文在线| 黑人精品无码一区二区三区AV| 日韩女优电影在线观看| 欧美尤物美女在线| 国产精品入口福利| 欧美精品尤物在线观看| 国产视频九色蝌蚪| 成人免费观看av| 波多野结衣不卡视频| 91超碰这里只有精品国产| 国产资源在线看| 日韩av免费一区| 亚洲第一论坛sis| 亚洲人精品午夜射精日韩| 丁香天五香天堂综合| 丰满少妇高潮久久三区| 欧美一级二级在线观看| 麻豆网站在线| 国产免费亚洲高清| 精品国产一区二区三区小蝌蚪 | 国产精品igao激情视频| 精品一区二区在线视频| 国产精品视频在| 欧美色爱综合网| 91caoporm在线视频| 国产精品日韩欧美大师| 青青草原综合久久大伊人精品 | 中文字幕在线成人| 久久精品国产福利| 伊人久久大香线蕉综合75| 久久99精品国产麻豆不卡| 成年人网站在线观看视频| 欧美卡1卡2卡| a免费在线观看| 国产精品久久7| 一区二区精品| 欧美做受高潮6| 欧美亚洲国产一区二区三区| 高清中文字幕一区二区三区| 国产精品国产三级国产专播精品人| 久久不卡国产精品一区二区 | 澳门av一区二区三区| 日韩激情视频| 另类人妖一区二区av| 欧美大片xxxx| 精品国产欧美一区二区| 蜜桃视频www网站在线观看| 茄子视频成人在线观看| 免费观看日韩电影| 黄色片子在线观看| 日韩欧美的一区| 女人高潮被爽到呻吟在线观看| 久久久久久九九| 欧美aaaaaa午夜精品| 免费成年人视频在线观看| 精品美女一区二区| 一根才成人网| 国产高清免费在线| 99久久国产综合精品色伊| 无码人妻久久一区二区三区不卡| 社区色欧美激情 | 最新精品在线| 日韩精品无码一区二区三区免费| 国产精品免费aⅴ片在线观看| 国产美女自慰在线观看| 91精品国产色综合| 操欧美老女人| 日韩少妇一区二区| 欧美在线一区二区三区| 色呦呦呦在线观看| 快播亚洲色图| 精品一区二区三区免费视频| 福利一区二区三区四区| 伊人久久久久久久久久| 日韩欧美中文字幕在线视频 | 国产在线精品一区二区不卡了| 国产主播在线观看| 国产一区二区三区在线播放免费观看 | 色老头久久综合| 深夜国产在线播放| 欧美中日韩免费视频| 国产精品一区二区视频| 青青视频在线免费观看| 九九热这里只有在线精品视| 极品美女一区二区三区| 亚洲av成人精品一区二区三区| 欧美写真视频网站| 天堂√中文最新版在线|