04-spring-boot-resttemplate netty定製使用

丁丁匠artizan發表於2020-10-24

04-spring-boot-resttemplate netty定製使用

rest template可以使用netty定製的工廠類-Netty4ClientHttpRequestFactory,完成相關rest介面訪問工作,由於上一節已經大致介紹了相關rest template的使用,本文的重點放在替換的處理要點盤點以及Netty4ClientHttpRequestFactory的實現討論上。

1 核心依賴

    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation group: 'io.netty', name: 'netty-all', version: '4.1.53.Final'

https://www.jianshu.com/p/c99bfdb5bf11

2 Netty4ClientHttpRequestFactory定製程式碼

其實主要程式碼與上一節相同,僅Supplier requestFactory的工場bean換成了我們的Supplier requestFactory。

image-20201024193332165

3 工作原理探究

為了證實相關程式碼的工作,使用了arthas監控相關程式碼,列印出了Netty4ClientHttpRequestFactory的具體堆疊呼叫,arthas指令如下是所示

stack org.springframework.http.client.Netty4ClientHttpRequestFactory

如下圖所示,可以看到兩個堆疊,一個是netty執行緒的訊息傳送,通道相關處理,另外一個則是傳送rest請求的相關介面的底層呼叫棧,可以看到,相關rest介面的傳送,底層實際上是Netty4ClientHttpRequestFactory呼叫netty完成的,從兩個堆疊就可以非常明確。

image-20201024194849294

4 不推薦理由

spring官方目前已經不支援netty底層實現,這裡是原因說明:

image-20201024193830545

原來底層netty實現的方式每次都會關閉http連線,這裡確實不值得推薦。

相關文章