最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud Gateway HttpWebHandlerAdapter鏈路調(diào)用請求流程介紹

 更新時間:2022年10月21日 14:04:51   作者:Polarisy丶  
Spring Cloud Gateway旨在為微服務架構(gòu)提供一種簡單有效的、統(tǒng)一的 API 路由管理方式。Spring Cloud Gateway 作為 Spring Cloud 生態(tài)系中的網(wǎng)關,它不僅提供統(tǒng)一的路由方式,并且基于 Filter 鏈的方式提供了網(wǎng)關基本的功能,例如:安全、監(jiān)控/埋點和限流等

前言

上一節(jié)我們說到從HttpWebHandlerAdapter的handle方法說起到DispatcherHandler的調(diào)用流程

那么HttpWebHandlerAdapter的handle方法是從哪里來調(diào)用的呢?

我們可以找下看哪些類使用了HttpHandler

通過這些類的名字,我們可以發(fā)現(xiàn),HttpHandler 往下就是具體的 Web 容器了,也就是說有具體的 Web 容器來接受請求,然后通過調(diào)用 HttpWebHandlerAdapter#handler 來進行后續(xù)的處理。這樣我們也就明白了 為什么 HttpHandler 的具體實現(xiàn)是一個適配器,因為它要適配不同的底層容器,Spring webFLux 不僅僅可以使用 NettyReactiveWebServer 作為底層Web 容器,也可以使用 tomcat、jetty等 servlet 的容器。

web容器

通過上面分析點進去可以看到

	NettyReactiveWebServerFactory.java
	@Override
	public WebServer getWebServer(HttpHandler httpHandler) {
		HttpServer httpServer = createHttpServer();
		ReactorHttpHandlerAdapter handlerAdapter = new ReactorHttpHandlerAdapter(httpHandler);
		NettyWebServer webServer = createNettyWebServer(httpServer, handlerAdapter, this.lifecycleTimeout,
				getShutdown());
		webServer.setRouteProviders(this.routeProviders);
		return webServer;
	}

通過方法名就可以發(fā)現(xiàn)這就是得到一個web服務

往上面一直追蹤可以找到入口是AbstractApplicationContext#onRefresh方法中,也就是在AbstractApplicationContext#refresh中調(diào)用的。熟悉Spring的同學可以看到這就是Spring容器啟動的核心方法。

接著上面的代碼,可以看到第二行,實例化了ReactorHttpHandlerAdapter對象

點進去可以看到核心的apply方法

	@Override
	public Mono<Void> apply(HttpServerRequest reactorRequest, HttpServerResponse reactorResponse) {
		NettyDataBufferFactory bufferFactory = new NettyDataBufferFactory(reactorResponse.alloc());
		try {
			ReactorServerHttpRequest request = new ReactorServerHttpRequest(reactorRequest, bufferFactory);
			ServerHttpResponse response = new ReactorServerHttpResponse(reactorResponse, bufferFactory);
			if (request.getMethod() == HttpMethod.HEAD) {
				response = new HttpHeadResponseDecorator(response);
			}
             //調(diào)用handle方法
			return this.httpHandler.handle(request, response)
					.doOnError(ex -> logger.trace(request.getLogPrefix() + "Failed to complete: " + ex.getMessage()))
					.doOnSuccess(aVoid -> logger.trace(request.getLogPrefix() + "Handling completed"));
		}
		catch (URISyntaxException ex) {
			if (logger.isDebugEnabled()) {
				logger.debug("Failed to get request URI: " + ex.getMessage());
			}
			reactorResponse.status(HttpResponseStatus.BAD_REQUEST);
			return Mono.empty();
		}
	}

可以看到在這里調(diào)用開始httpHandler#handle方法,

WebServerManager.java #WebServerManager 		
this.handler = new DelayedInitializationHttpHandler(handlerSupplier, lazyInit);
this.webServer = factory.getWebServer(this.handler);

此時的httpHandler是DelayedInitializationHttpHandle對象,調(diào)用其handle方法

可以看到最后實際調(diào)用的是HttpWebHandlerAdapter的handle方法

到此這篇關于SpringCloud Gateway HttpWebHandlerAdapter鏈路調(diào)用請求流程介紹的文章就介紹到這了,更多相關SpringCloud HttpWebHandlerAdapter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java實現(xiàn)顯示指定類型的文件

    Java實現(xiàn)顯示指定類型的文件

    這篇文章主要介紹了Java實現(xiàn)顯示指定類型的文件,需要的朋友可以參考下
    2014-03-03
  • spring boot 使用Aop通知打印控制器請求報文和返回報文問題

    spring boot 使用Aop通知打印控制器請求報文和返回報文問題

    這篇文章主要介紹了spring-boot 使用Aop通知打印控制器請求報文和返回報文,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-04-04
  • SpringBoot Security前后端分離登錄驗證的實現(xiàn)

    SpringBoot Security前后端分離登錄驗證的實現(xiàn)

    這篇文章主要介紹了SpringBoot Security前后端分離登錄驗證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • SpringBoot實現(xiàn)單文件與多文件上傳功能

    SpringBoot實現(xiàn)單文件與多文件上傳功能

    這篇文章主要介紹了SpringBoot實現(xiàn)單文件與多文件上傳功能,Spring?MVC對文件上傳做了簡化,而在Spring?Boot中對此做了更進一步的簡化,文件上傳變得更為方便,下面開始演示,需要的小伙伴可以參考一下,希望對你有所幫助
    2022-01-01
  • Java設計模式中的門面模式詳解

    Java設計模式中的門面模式詳解

    門面模式又叫外觀模式(Facade Pattern),主要用于隱藏系統(tǒng)的復雜性,并向客戶端提供了一個客戶端可以訪問系統(tǒng)的接口,本文通過實例代碼給大家介紹下java門面模式的相關知識,感興趣的朋友一起看看吧
    2022-09-09
  • java GUI編程之監(jiān)聽操作實例分析

    java GUI編程之監(jiān)聽操作實例分析

    這篇文章主要介紹了java GUI編程之監(jiān)聽操作,結(jié)合實例形式分析了java GUI編程監(jiān)聽操作的Button監(jiān)聽、TextField文本輸入監(jiān)聽等相關操作技巧與注意事項,需要的朋友可以參考下
    2020-01-01
  • java IO流讀取圖片供前臺顯示代碼分享

    java IO流讀取圖片供前臺顯示代碼分享

    這篇文章主要介紹了java IO流讀取圖片供前臺顯示代碼分享,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java實現(xiàn)輸出數(shù)字三角形實例代碼

    Java實現(xiàn)輸出數(shù)字三角形實例代碼

    大家好,本篇文章主要講的是Java實現(xiàn)輸出三角形實例代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Spring中的Sentinel熔斷降級詳解

    Spring中的Sentinel熔斷降級詳解

    這篇文章主要介紹了Spring中的Sentinel熔斷降級詳解,熔斷降級是一種保護系統(tǒng)穩(wěn)定性和可用性的機制,旨在防止故障的擴散和蔓延,提高用戶體驗和信任度,需要的朋友可以參考下
    2023-09-09
  • Java正則表達式之Pattern和Matcher的使用

    Java正則表達式之Pattern和Matcher的使用

    本文詳細介紹了Java中處理正則表達式的Pattern和Matcher類的使用方法和實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-09-09

最新評論

邮箱| 共和县| 襄樊市| 瓦房店市| 凤城市| 洱源县| 十堰市| 朝阳市| 高雄县| 隆昌县| 光泽县| 岳普湖县| 娱乐| 南郑县| 台中县| 二手房| 苍山县| 固安县| 玛沁县| 宣化县| 吉水县| 南昌县| 兖州市| 微博| 汕尾市| 凤翔县| 定州市| 苗栗市| 永靖县| 沈阳市| 翁牛特旗| 福鼎市| 木兰县| 岫岩| 剑川县| 凤庆县| 河源市| 化德县| 南部县| 洪洞县| 东阿县|