欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

往上面一直追蹤可以找到入口是AbstractApplicationContext#onRefresh方法中,也就是在AbstractApplicationContext#refresh中調(diào)用的。熟悉Spring的同學(xué)可以看到這就是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方法

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

相關(guān)文章

  • Springboot中實現(xiàn)策略模式+工廠模式的方法

    Springboot中實現(xiàn)策略模式+工廠模式的方法

    這篇文章主要介紹了Springboot中實現(xiàn)策略模式+工廠模式,具體策略模式和工廠模式的UML我就不給出來了,使用這個這兩個模式主要是防止程序中出現(xiàn)大量的IF ELSE IF ELSE....,接下來咱們直接實現(xiàn)Springboot策略模式工廠模式
    2022-03-03
  • SpringBoot采用AJAX實現(xiàn)異步發(fā)布帖子詳解

    SpringBoot采用AJAX實現(xiàn)異步發(fā)布帖子詳解

    Ajax是一種web應(yīng)用技術(shù),可以借助客戶端腳本(javascript)與服務(wù)端應(yīng)用進行異步通訊,獲取服務(wù)端數(shù)據(jù)以后,可以進行局部刷新,進而提高數(shù)據(jù)的響應(yīng)和渲染速度。所有的Ajax請求都會基于DOM(HTML元素)事件,通過XHR(XMLHttpRequest)對象實現(xiàn)與服務(wù)端異步通訊局部更新
    2022-08-08
  • SpringBoot?常用讀取配置文件的三種方法詳解

    SpringBoot?常用讀取配置文件的三種方法詳解

    這篇文章主要介紹了SpringBoot?常用讀取配置文件的3種方法,通過本文學(xué)習(xí)可以解決Spring Boot有哪些常用的讀取配置文件方式,一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu),如list,map如何配置,帶著這些問題一起通過本文學(xué)習(xí)吧
    2022-09-09
  • Java異步處理機制實例詳解

    Java異步處理機制實例詳解

    本文涉及Java編程中異步處理機制的簡單介紹和一個相關(guān)實例,相信通過這篇文章,大家能對異步處理有更多的了解。
    2017-09-09
  • 如何解決SpringBoot2.x版本對Velocity模板不支持的方案

    如何解決SpringBoot2.x版本對Velocity模板不支持的方案

    這篇文章主要介紹了如何解決SpringBoot2.x版本對Velocity模板不支持的方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • Spring里的Async注解實現(xiàn)異步操作的方法步驟

    Spring里的Async注解實現(xiàn)異步操作的方法步驟

    這篇文章主要介紹了Spring里的Async注解實現(xiàn)異步操作的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • SpringBoot啟動自動終止也不報錯的原因及解決

    SpringBoot啟動自動終止也不報錯的原因及解決

    這篇文章主要介紹了SpringBoot啟動自動終止也不報錯的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java單機環(huán)境實現(xiàn)定時任務(wù)技術(shù)

    Java單機環(huán)境實現(xiàn)定時任務(wù)技術(shù)

    這篇文章主要介紹了Java單機環(huán)境實現(xiàn)定時任務(wù)技術(shù),文章內(nèi)容介紹詳細,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • java如何實現(xiàn)多線程的順序執(zhí)行

    java如何實現(xiàn)多線程的順序執(zhí)行

    多線程是java的一種重要技術(shù),但是多線程的運行是沒有絕對的順序的,那么java如何實現(xiàn)多線程的順序執(zhí)行,下面就一起來了解一下
    2021-05-05
  • 基于Spring depends-on的使用詳解

    基于Spring depends-on的使用詳解

    這篇文章主要介紹了Spring depends-on的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論