日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

feign服务器响应数据量过大,SpringCloud之Feign 性能优化

發(fā)布時(shí)間:2025/3/12 javascript 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 feign服务器响应数据量过大,SpringCloud之Feign 性能优化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本篇文章主要會(huì)講解 Feign 性能優(yōu)化的問(wèn)題,例如Gzip壓縮、HTTP連接池、請(qǐng)求超時(shí)等。

1.Gzip壓縮

1.1 概述

?gzip 介紹:gzip 是一種數(shù)據(jù)格式,采用 deflate 算法壓縮數(shù)據(jù);gzip 是一種流行的文件壓縮算法,應(yīng)用十分廣泛,尤其是在 Linux 平臺(tái)。

gzip 能力:當(dāng) Gzip 壓縮一個(gè)純文本文件時(shí),效果是非常明顯的,大約可以減少 70% 以上的文件大小。

gzip 作用:網(wǎng)絡(luò)數(shù)據(jù)經(jīng)過(guò)壓縮后實(shí)際上降低了網(wǎng)絡(luò)傳輸?shù)淖止?jié)數(shù),最明顯的好處就是可以加快網(wǎng)頁(yè)加載的速度。網(wǎng)頁(yè)加載速度加快的好處不言而喻,除了節(jié)省流量,改善用戶(hù)的瀏覽體驗(yàn)外,另一個(gè)潛在的好處是 Gzip 與搜索引擎的抓取工具有著更好的關(guān)系。

1.2 HTTP協(xié)議中關(guān)于壓縮傳輸?shù)囊?guī)定

?客戶(hù)端向服務(wù)器請(qǐng)求中帶有:Accept-Encoding:gzip,deflate 字段,向服務(wù)器表示客戶(hù)端支持的壓縮格式(gzip 或者 deflate),如果不發(fā)送該消息頭,服務(wù)端默認(rèn)是不會(huì)壓縮的。

?服務(wù)端在收到請(qǐng)求之后,如果發(fā)現(xiàn)請(qǐng)求頭中含有 Accept-Encoding 字段,并且支持該類(lèi)型壓縮,就會(huì)對(duì)響應(yīng)報(bào)文壓縮之后返回給客戶(hù)端,并且攜帶 Content-Encoding:gzip 消息頭,表示響應(yīng)報(bào)文是根據(jù)該格式進(jìn)行壓縮的。

?客戶(hù)端接收到請(qǐng)求之后,先判斷是否有 Content-Encoding 消息頭,如果有,按該格式解壓報(bào)文。否則按正常報(bào)文處理。

1.3 壓縮案例

局部配置

只配置 Consumer 通過(guò) Feign 到 Provider 的請(qǐng)求與相應(yīng)的 Gzip 壓縮。

服務(wù)消費(fèi)者 application.yml

# Feign gzip 壓縮

feign:

compression:

request:

mime-types: text/xml,application/xml,application/json # 配置壓縮支持的 MIME TYPE

min-request-size: 512 # 配置壓縮數(shù)據(jù)大小的最小閾值,默認(rèn) 2048

enabled: true # 請(qǐng)求是否開(kāi)啟 gzip 壓縮

response:

enabled: true # 響應(yīng)是否開(kāi)啟 gzip 壓縮

復(fù)制代碼

全局配置

對(duì)客戶(hù)端瀏覽器的請(qǐng)求以及 Consumer 對(duì) Provider 的請(qǐng)求與響應(yīng)都實(shí)現(xiàn) Gzip 壓縮。

服務(wù)消費(fèi)者 application.yml

server:

compression:

# 是否開(kāi)啟壓縮

enabled: true

# 配置壓縮支持的 MIME TYPE

mime-types: application/json,application/xml,text/html,text/xml,text/plain

復(fù)制代碼

2.HTTP連接池

?我們知道,建立 HTTP 連接的過(guò)程是很復(fù)雜的一個(gè)過(guò)程,涉及到多個(gè)數(shù)據(jù)包的交換,很耗時(shí)間,比如建立TCP連接時(shí),需要的三次握手和四次揮手開(kāi)銷(xiāo)就比較大。

?采用 HTTP 連接池,可以節(jié)約大量的 3 次握手 4 次揮手,這樣能大大提升吞吐量。

Feign 的 HTTP 客戶(hù)端支持 3 種框架:HttpURLConnection、HttpClient、OkHttp;默認(rèn)是 HttpURLConnection。可以通過(guò)查看源碼 org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration.java 得知。

傳統(tǒng)的 HttpURLConnection 是 JDK 自帶的,并不支持連接池,如果要實(shí)現(xiàn)連接池的機(jī)制,還需要自己來(lái)管理連接對(duì)象。

HttpClient 相比傳統(tǒng) JDK 自帶的 HttpURLConnection,它封裝了訪問(wèn) HTTP 的請(qǐng)求頭,參數(shù),內(nèi)容體,響應(yīng)等等;它不僅使客戶(hù)端發(fā)送 HTTP 請(qǐng)求變得容易,而且也方便了開(kāi)發(fā)人員測(cè)試接口(基于 HTTP 協(xié)議的),既提高了開(kāi)發(fā)的效率,又提高了代碼的健壯性

那么如何使用呢?

首先,在對(duì)應(yīng)消費(fèi)者項(xiàng)目中,添加對(duì)應(yīng)依賴(lài),因?yàn)楸疚闹惺褂玫腍oxton.SR1版本已經(jīng)默認(rèn)集成了 apache httpclient 依賴(lài),所以只需要添加一個(gè)依賴(lài)即可

org.apache.httpcomponents

httpclient

4.5.11

io.github.openfeign

feign-httpclient

10.7.4

復(fù)制代碼

然后,配置文件中開(kāi)啟即可

feign:

httpclient:

enabled: true # 開(kāi)啟 httpclient

復(fù)制代碼

**注意:**如果使用 HttpClient 作為 Feign 的客戶(hù)端工具。那么在定義接口上的注解是需要注意的,如果傳遞的參數(shù)是一個(gè)自定義的對(duì)象(對(duì)象會(huì)使用 JSON 格式來(lái)專(zhuān)遞),需要配置參數(shù)類(lèi)型,例如:@GetMapping(value = "/single/pojo", consumes = MediaType.APPLICATION_JSON_VALUE)。本文中使用的 Spring CLoud 版本,已無(wú)需手動(dòng)配置。

3.請(qǐng)求超時(shí)

?Feign 的負(fù)載均衡底層用的就是 Ribbon,所以這里的請(qǐng)求超時(shí)配置其實(shí)就是配置 Ribbon。

在服務(wù)壓力比較大的情況下,可能處理服務(wù)的過(guò)程需要花費(fèi)一定的時(shí)間,而默認(rèn)請(qǐng)求超時(shí)的配置是 1s 所以我們需要調(diào)整該配置延長(zhǎng)請(qǐng)求超時(shí)時(shí)間。

?在消費(fèi)者端配置文件添加:

ribbon:

ConnectTimeout: 5000 # 請(qǐng)求連接的超時(shí)時(shí)間 默認(rèn)的時(shí)間為 1 秒

ReadTimeout: 5000 # 請(qǐng)求處理的超時(shí)時(shí)間

復(fù)制代碼

?

總結(jié)

以上是生活随笔為你收集整理的feign服务器响应数据量过大,SpringCloud之Feign 性能优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。