中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

有限責(zé)任公司注冊(cè)條件網(wǎng)絡(luò)推廣seo教程

有限責(zé)任公司注冊(cè)條件,網(wǎng)絡(luò)推廣seo教程,關(guān)于網(wǎng)站建設(shè)申請(qǐng),3d效果圖怎么制作用什么軟件一、網(wǎng)關(guān)的基本概念 SpringCloudGateway網(wǎng)關(guān)是所有微服務(wù)的統(tǒng)一入口。 1.1 它的主要作用是: 反向代理(請(qǐng)求的轉(zhuǎn)發(fā)) 路由和負(fù)載均衡 身份認(rèn)證和權(quán)限控制 對(duì)請(qǐng)求限流 1.2 相比于Zuul的優(yōu)勢(shì): SpringCloudGateway基于Spring5中…

一、網(wǎng)關(guān)的基本概念

SpringCloudGateway網(wǎng)關(guān)是所有微服務(wù)的統(tǒng)一入口。

1.1 它的主要作用是:

  • 反向代理(請(qǐng)求的轉(zhuǎn)發(fā))

  • 路由和負(fù)載均衡

  • 身份認(rèn)證和權(quán)限控制

  • 對(duì)請(qǐng)求限流

1.2 相比于Zuul的優(yōu)勢(shì):

SpringCloudGateway基于Spring5中提供的WebFlux,是一種響應(yīng)式編程的實(shí)現(xiàn),性能更加優(yōu)越。

Zuul的實(shí)現(xiàn)方式比較老式,基于Servlet的實(shí)現(xiàn),它是一種阻塞式編程,在高并發(fā)下性能性能不佳。

拓展:

其實(shí)Nginx也可以作為網(wǎng)關(guān),但是要使用Nginx自主實(shí)現(xiàn)網(wǎng)關(guān)的相關(guān)功能,還需要借助lua腳本語(yǔ)言,學(xué)習(xí)成本是比較高的,現(xiàn)在一般也不會(huì)使用它來(lái)做網(wǎng)關(guān),但是只按性能來(lái)講Nginx,性能是最高的。

1.3 SpringCloudGateway架構(gòu)圖:

圖片

?

圖片

微服務(wù)只接收來(lái)自網(wǎng)關(guān)的請(qǐng)求,而其它直接訪問微服務(wù)本身的請(qǐng)求拒絕。

這樣可以極大保護(hù)微服務(wù)免受不法侵害。

同時(shí)在請(qǐng)求壓力激增時(shí),可以實(shí)施服務(wù)限流,保護(hù)微服務(wù)集群。

二、SpringBoot中配置GateWay

2.1 引入GateWay的Maven依賴

<!--網(wǎng)關(guān)?起步依賴-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服務(wù)發(fā)現(xiàn)?起步依賴-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.2 配置application.yml文件

server:port:?10086???#?網(wǎng)關(guān)端口
spring:application:name:?gateway?#?服務(wù)名稱cloud:nacos:server-addr:?localhost:8848????#?nacos?地址gateway:routes:?????????#?網(wǎng)關(guān)路由配置-?id:?user-service??????#?路由id,自定義,只要唯一即可#?uri:?http://127.0.0.1:8081???#?路由的目標(biāo)地址?(直接寫死地址的方式,不推薦)uri:?lb://userservice????#?路由的目標(biāo)地址?lb是負(fù)載均衡,后面跟服務(wù)名稱(推薦)predicates:???????#?路由斷言,判斷請(qǐng)求是否符合路由規(guī)則的條件-?Path=/user/**??????#?按照路徑匹配,以/user/開頭的請(qǐng)求就符合要求-?id:?card-serviceuri:?lb://cardservicepredicates:-?Path=/card/**

gateway配置中的注意點(diǎn):

1.routes 后面的路由可以配置多個(gè),相當(dāng)于配置個(gè)數(shù)組,一個(gè)-開頭的配置就是其中的一個(gè)數(shù)組元素。

2.uri為什么選擇以服務(wù)名+負(fù)載均衡的方式?

主要是寫死地址的話,今后如果userservice的地址變了,那么又要去修改yml配置文件。而lb://userservice可以讓程序員一眼認(rèn)出這是哪個(gè)微服務(wù),以后地址變了也無(wú)需修改yml配置文件。

上述配置詳解:

將?/user/**開頭的請(qǐng)求,代理到lb://userservice

將?/card/**開頭的請(qǐng)求,代理到lb://cardservice。

lb是負(fù)載均衡,根據(jù)服務(wù)名拉取服務(wù)列表,實(shí)現(xiàn)負(fù)載均衡。

  • http://127.0.0.1:10086/user/99?就算是/user/**開頭的請(qǐng)求,不要把協(xié)議、ip和端口計(jì)算在內(nèi)。

  • 有多少個(gè)需要配置的路由,都按上面的格式配置即可

三、GateWay路由配置詳解

路由主要有四個(gè)配置:

  • 路由id(id)

  • 路由目標(biāo)(uri)

  • 路由斷言(predicates):判斷路由的規(guī)則,

  • 路由過濾器(filters):對(duì)請(qǐng)求或響應(yīng)做處理

3.1 路由id

當(dāng)前路由的唯一標(biāo)識(shí)。

3.2 路由目標(biāo)

路由的目標(biāo)地址,http代表固定地址,lb代表根據(jù)服務(wù)名負(fù)載均衡。

一般都不會(huì)選擇寫死http固定地址的方式。而是選擇可維護(hù)性更強(qiáng)的lb根據(jù)服務(wù)名負(fù)載均衡的方式。

具體優(yōu)勢(shì)如上所言。

3.3 路由斷言

路由斷言主要用來(lái)判斷路由的規(guī)則。

配置文件中寫的斷言規(guī)則只是字符串,這些字符串會(huì)被Predicate Factory讀取并處理。

例如Path=/user/**是按照路徑匹配,這個(gè)規(guī)則是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory類來(lái)處理。

像這樣的斷言工廠在SpringCloudGateway還有十幾個(gè):

圖片

實(shí)際使用時(shí),根絕業(yè)務(wù)要求選擇使用即可。

不過一般來(lái)講,最常用的是使用Path這種斷言工廠,僅用它就能滿足常見的需求了。

關(guān)于Path斷言工廠的補(bǔ)充:

  • Path=/card/**代表 以/card/路徑開頭的多級(jí)路徑請(qǐng)求,這么寫多級(jí)路徑請(qǐng)求和一級(jí)路徑請(qǐng)求都生效。

  • Path=/card/*代表 以/card/路徑開頭的一級(jí)路徑請(qǐng)求,這么寫多級(jí)路徑請(qǐng)求將不會(huì)生效。

斷言工廠官方文檔:

  • https://docs.spring.io/spring-cloud-gateway/docs/3.1.4-SNAPSHOT/reference/html/#gateway-request-predicates-factories

今后如果有復(fù)雜的斷言工廠配置,可以參照官網(wǎng)文檔上的例子去實(shí)現(xiàn)。

3.4 路由過濾器(filters)

路由過濾器對(duì)請(qǐng)求或響應(yīng)做處理。

圖片

客戶端請(qǐng)求先找到路由,路由匹配時(shí)經(jīng)過過濾器層層篩選,最終訪問到微服務(wù)。

當(dāng)然微服務(wù)的請(qǐng)求反悔時(shí),也會(huì)經(jīng)過過濾器的篩選,只不過我們一般只對(duì)請(qǐng)求過濾,而不會(huì)對(duì)響應(yīng)過濾。

SpringCloudGateWay目前已經(jīng)提供了34種不同的過濾器工廠。

常用的幾個(gè)有:

圖片

3.4.1 請(qǐng)求頭過濾器配置示例(局部過濾器)
spring:cloud:gateway:routes:-?id:?user-service?uri:?lb://userservice?predicates:?-?Path=/user/**?filters:?????????#?過濾器配置-?AddRequestHeader=token,?test?#?添加請(qǐng)求頭

上述過濾器的含義:

給所有進(jìn)入userservice的請(qǐng)求添加一個(gè)請(qǐng)求頭。

請(qǐng)求頭的key為token,value為test。

由于當(dāng)前前過濾器寫在微服務(wù)的userservice路由下,因此僅僅對(duì)訪問微服務(wù)userservice的請(qǐng)求有效。

3.4.2 默認(rèn)過濾器配置示例(全局過濾器)
spring:cloud:gateway:routes:-?id:?user-service?uri:?lb://userservice?predicates:?-?Path=/user/**default-filters:??????#?默認(rèn)過濾器配置-?AddRequestHeader=token,?test??#?添加請(qǐng)求頭

default-filters的配置和routes平級(jí)。

只要配置在default-filters下面的過濾器,會(huì)對(duì)routes配置的所有路由都生效。

過濾器工廠官方文檔:

  • https://docs.spring.io/spring-cloud-gateway/docs/3.1.4-SNAPSHOT/reference/html/#gateway-request-predicates-factories

今后如果有復(fù)雜的斷言工廠配置,可以參照官網(wǎng)文檔上的例子去實(shí)現(xiàn)。

四、自定義全局路由過濾器

有時(shí)候SpringCloudGateWay提供的過濾器工廠不能滿足自己的要求。

可能有時(shí)候需要在過濾時(shí)做一些其它的邏輯操作。

那么這時(shí)候可以選擇使用java代碼自定義全局過濾器。

代碼示例:

@Component
public?class?GateWayFilter?implements?GlobalFilter,?Ordered?{@Overridepublic?Mono<Void>?filter(ServerWebExchange?exchange,?GatewayFilterChain?chain)?{//?1.獲取請(qǐng)求參數(shù)?//1.這里的request并不是servlet中的request??//2.返回值是一個(gè)多鍵的map集合、也就是說這個(gè)map集合的鍵可以重復(fù)MultiValueMap<String,?String>?params?=?exchange.getRequest().getQueryParams();//?2.獲取userName參數(shù)String?userName?=?params.getFirst("userName");//?3.校驗(yàn)if?("root".equals(userName))?{//?放行return?chain.filter(exchange);}//?4.攔截//?4.1.禁止訪問,設(shè)置狀態(tài)碼exchange.getResponse().setStatusCode(500);//?4.2.結(jié)束處理return?exchange.getResponse().setComplete();}@Overridepublic?int?getOrder()?{return?-1;}
}

當(dāng)有多個(gè)過濾器時(shí),Order的值決定了過濾器的執(zhí)行順序。

數(shù)值越大優(yōu)先級(jí)越低, 負(fù)的越多, 優(yōu)先級(jí)越高。

設(shè)置Order的值有兩種方式:

1. 實(shí)現(xiàn)Ordered接口,并且重寫getOrder方法

@Component
public?class?GateWayFilter?implements?GlobalFilter,?Ordered?{@Overridepublic?Mono<Void>?filter(ServerWebExchange?exchange,?GatewayFilterChain?chain)?{}@Overridepublic?int?getOrder()?{return?-1;}
}

2. 使用@Order注解

@Order(-1)
@Component
public?class?GateWayFilter?implements?GlobalFilter,?Ordered?{@Overridepublic?Mono<Void>?filter(ServerWebExchange?exchange,?GatewayFilterChain?chain)?{}
}

五、過濾路由過濾器的執(zhí)行順序

5.1 過濾器的種類

SpringCloudGateWay中,有三種過濾器:

  • 默認(rèn)過濾器default-filters

  • 只對(duì)具體某個(gè)路由生效的局部過濾器filters

  • 使用java代碼編寫的全局過濾器GlobalFilter

5.2 過濾器的執(zhí)行順序

圖片

由上圖知過濾器的執(zhí)行順序?yàn)?#xff1a;默認(rèn)過濾器 → 當(dāng)前路由過濾器 → 全局過濾器。

六、網(wǎng)關(guān)的跨域問題

6.1 跨域的概念和原理

跨域:請(qǐng)求位置和被請(qǐng)求位置不同源就會(huì)發(fā)生跨域。

這里的不同源包括兩個(gè)點(diǎn):

  • 域名不同:www.baidu.com 和 www.taobao.com。(IP不同也是相同道理)

  • 端口不同:127.0.0.1:8080和127.0.0.1:8081。

而瀏覽器又會(huì)禁止請(qǐng)求的發(fā)起者與服務(wù)端發(fā)生跨域AJAX請(qǐng)求。

如果發(fā)生了跨域請(qǐng)求,服務(wù)器端是能夠正常響應(yīng)的,但是響應(yīng)的結(jié)果會(huì)被瀏覽器攔截。

6.2 跨域常見解決方案

使用CORS方式。

CORS是一個(gè)W3C標(biāo)準(zhǔn),全稱是"跨域資源共享"(Cross-origin resource sharing)。

它允許瀏覽器向跨源服務(wù)器,發(fā)出XMLHttpRequest請(qǐng)求,從而克服了AJAX只能同源使用的限制。

6.3 gateway中如何解決跨域問題

方式一:配置application.yml文件:

spring:cloud:gateway:globalcors:?#?全局的跨域配置add-to-simple-url-handler-mapping:?true?#?解決options請(qǐng)求被攔截問題#?options請(qǐng)求?就是一種詢問服務(wù)器是否瀏覽器可以跨域的請(qǐng)求#?如果每次跨域都有詢問服務(wù)器是否瀏覽器可以跨域?qū)π阅芤彩菗p耗#?可以配置本次跨域檢測(cè)的有效期maxAge#?在maxAge設(shè)置的時(shí)間范圍內(nèi),不去詢問,統(tǒng)統(tǒng)允許跨域corsConfigurations:'[/**]':allowedOrigins:???#?允許哪些網(wǎng)站的跨域請(qǐng)求?-?"http://localhost:8090"allowedMethods:???#?允許的跨域ajax的請(qǐng)求方式-?"GET"-?"POST"-?"DELETE"-?"PUT"-?"OPTIONS"allowedHeaders:?"*"??#?允許在請(qǐng)求中攜帶的頭信息allowCredentials:?true?#?允許在請(qǐng)求中攜帶cookiemaxAge:?360000????#?本次跨域檢測(cè)的有效期(單位毫秒)#?有效期內(nèi),跨域請(qǐng)求不會(huì)一直發(fā)option請(qǐng)求去增大服務(wù)器壓力

方式二:使用編碼方式定義配置類:

import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.Configuration;
import?org.springframework.http.HttpHeaders;
import?org.springframework.http.HttpMethod;
import?org.springframework.http.HttpStatus;
import?org.springframework.http.server.reactive.ServerHttpRequest;
import?org.springframework.http.server.reactive.ServerHttpResponse;
import?org.springframework.web.cors.reactive.CorsUtils;
import?org.springframework.web.server.ServerWebExchange;
import?org.springframework.web.server.WebFilter;
import?org.springframework.web.server.WebFilterChain;
import?reactor.core.publisher.Mono;@Configuration
public?class?CorsConfig?{private?static?final?String?MAX_AGE?=?"18000L";@Beanpublic?WebFilter?corsFilter()?{return?(ServerWebExchange?ctx,?WebFilterChain?chain)?->?{ServerHttpRequest?request?=?ctx.getRequest();//?使用SpringMvc自帶的跨域檢測(cè)工具類判斷當(dāng)前請(qǐng)求是否跨域if?(!CorsUtils.isCorsRequest(request))?{return?chain.filter(ctx);}HttpHeaders?requestHeaders?=?request.getHeaders();??????????????????????????????????//?獲取請(qǐng)求頭ServerHttpResponse?response?=?ctx.getResponse();????????????????????????????????????//?獲取響應(yīng)對(duì)象HttpMethod?requestMethod?=?requestHeaders.getAccessControlRequestMethod();??????????//?獲取請(qǐng)求方式對(duì)象HttpHeaders?headers?=?response.getHeaders();????????????????????????????????????????//?獲取響應(yīng)頭headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN,?requestHeaders.getOrigin());???//?把請(qǐng)求頭中的請(qǐng)求源(協(xié)議+ip+端口)添加到響應(yīng)頭中(相當(dāng)于yml中的allowedOrigins)headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS,?requestHeaders.getAccessControlRequestHeaders());if?(requestMethod?!=?null)?{headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS,?requestMethod.name());????//?允許被響應(yīng)的方法(GET/POST等,相當(dāng)于yml中的allowedMethods)}headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS,?"true");??????????//?允許在請(qǐng)求中攜帶cookie(相當(dāng)于yml中的allowCredentials)headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS,?"*");????????????????//?允許在請(qǐng)求中攜帶的頭信息(相當(dāng)于yml中的allowedHeaders)headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE,?MAX_AGE);???????????????????????????//?本次跨域檢測(cè)的有效期(單位毫秒,相當(dāng)于yml中的maxAge)if?(request.getMethod()?==?HttpMethod.OPTIONS)?{????????????????????????????????????//?直接給option請(qǐng)求反回結(jié)果response.setStatusCode(HttpStatus.OK);return?Mono.empty();}return?chain.filter(ctx);???????????????????????????????????????????????????????????//?不是option請(qǐng)求則放行};}}
http://www.risenshineclean.com/news/52648.html

相關(guān)文章:

  • 配件網(wǎng)站模板網(wǎng)站優(yōu)化什么意思
  • 開啟wordpress mu優(yōu)化模型的推廣
  • 下列關(guān)于網(wǎng)站開發(fā)中seo顧問是干什么
  • 沒有公司 接單做網(wǎng)站搜索引擎推廣文案
  • 杭州做網(wǎng)站套餐新手銷售怎么和客戶交流
  • 成都網(wǎng)頁(yè)制作公司排名北京優(yōu)化seo
  • 網(wǎng)站開發(fā)checklist如何讓百度收錄自己信息
  • 房地產(chǎn)網(wǎng)站建設(shè)與優(yōu)化分析北京seo專業(yè)團(tuán)隊(duì)
  • 軟件外包學(xué)院大學(xué)承認(rèn)嗎網(wǎng)站免費(fèi)seo
  • 上海做外貿(mào)網(wǎng)站建設(shè)湖南企業(yè)競(jìng)價(jià)優(yōu)化首選
  • 網(wǎng)站建設(shè)地位友情鏈接交換網(wǎng)
  • 揭陽(yáng)網(wǎng)站制作軟件技能培訓(xùn)機(jī)構(gòu)
  • 移動(dòng)應(yīng)用開發(fā)難學(xué)嗎上海有哪些優(yōu)化網(wǎng)站推廣公司
  • WordPress離線博客江蘇網(wǎng)站seo設(shè)計(jì)
  • dw做網(wǎng)站怎么換圖片南京最新消息今天
  • 中國(guó)外發(fā)加工網(wǎng)app北京網(wǎng)站優(yōu)化推廣公司
  • 有什么好用的模擬建站軟件營(yíng)銷策劃方案怎么做
  • 國(guó)內(nèi)做網(wǎng)站費(fèi)用seo建站網(wǎng)絡(luò)公司
  • 校本教研網(wǎng)站建設(shè)網(wǎng)絡(luò)營(yíng)銷的方法有哪些?舉例說明
  • 華強(qiáng)北 做網(wǎng)站中國(guó)輿情觀察網(wǎng)
  • jeecms 怎么建設(shè)網(wǎng)站網(wǎng)站搜索引擎優(yōu)化主要方法
  • 租用阿里云做網(wǎng)站鏈接是什么意思
  • 旅游平臺(tái)網(wǎng)站合作建設(shè)方案線上運(yùn)營(yíng)推廣
  • 網(wǎng)站建設(shè)反饋書模板成都網(wǎng)站seo排名優(yōu)化
  • 網(wǎng)頁(yè)投票鏈接怎么做汕頭seo優(yōu)化項(xiàng)目
  • wordpress的pingseo研究中心vip課程
  • 如何拿模板做網(wǎng)站網(wǎng)站seo案例
  • 做旅游網(wǎng)站推廣色盲怎么治療
  • 網(wǎng)站 擴(kuò)展廣告平臺(tái)網(wǎng)站有哪些
  • 成都網(wǎng)站建設(shè)公司淺談百度一下百度知道