Spring?cloud網(wǎng)關(guān)gateway進(jìn)行websocket路由轉(zhuǎn)發(fā)規(guī)則配置過程
Spring cloud網(wǎng)關(guān)gateway進(jìn)行websocket路由轉(zhuǎn)發(fā)規(guī)則配置
一、websocket及http路由轉(zhuǎn)發(fā)規(guī)則配置
后端是普通的服務(wù)時(shí)使用http或ws的詳細(xì)地址進(jìn)行轉(zhuǎn)發(fā),
后端是注冊(cè)到nacos上的服務(wù)時(shí),使用lb:開頭或lb:ws開頭前綴加上注冊(cè)服務(wù)名進(jìn)行配置,如下:
spring:
cloud:
gateway:
routes:
- id: http1
uri: "http://127.0.0.1:8081" #http轉(zhuǎn)發(fā)配置,直接使用http地址使用方式1
#url: "lb://serviceName" #http轉(zhuǎn)發(fā)配置,通過nacos注冊(cè)中心調(diào)用serviceName使用方式2
predicates:
- Path=/**
- id: websocket1
uri: "ws://127.0.0.1:8081" #websocket配置,直接地址使用方式1
#uri: "lb:ws://serviceName" #websocket配置,通過nacos注冊(cè)中心調(diào)用serviceName使用方式2
predicates:
- Path=/websocket補(bǔ)充:Spring Cloud Gateway--配置路由的方法
簡介
說明
本文介紹Spring Cloud Gateway配置路由的方法。
路由概述
路由是網(wǎng)關(guān)配置的基本組成模塊,和Zuul的路由配置模塊類似。一個(gè)Route模塊由一個(gè) ID,一個(gè)目標(biāo) URI,一組斷言和一組過濾器定義。如果斷言為真,則路由匹配,目標(biāo)URI會(huì)被訪問。
方案1:使用配置文件
配置文件是:application.yml。
法1:通過服務(wù)名實(shí)現(xiàn)動(dòng)態(tài)路由
默認(rèn)情況下Gatway會(huì)根據(jù)注冊(cè)中心注冊(cè)的服務(wù)列表, 以注冊(cè)中心上微服務(wù)名為路徑創(chuàng)建動(dòng)態(tài)路由進(jìn)行轉(zhuǎn)發(fā),從而實(shí)現(xiàn)動(dòng)態(tài)路由的功能。
application.yml示例
spring:
application:
name: cloud-gateway-gateway
cloud:
gateway:
discovery:
locator:
# 開啟從注冊(cè)中心動(dòng)態(tài)創(chuàng)建路由的功能,利用微服務(wù)名進(jìn)行路由
enabled: true
# 用小寫的請(qǐng)求路徑的服務(wù)名匹配服務(wù)。默認(rèn)為false(大寫)。(因?yàn)榉?wù)注冊(cè)時(shí)服務(wù)名被轉(zhuǎn)成大寫)
lowerCaseServiceId: true假如直接請(qǐng)求應(yīng)用時(shí)的url是:localhost:8080/findUser(假設(shè)應(yīng)用端口為8080)
則這樣配置后請(qǐng)求網(wǎng)關(guān)的url是:localhost:9000/user/findUser(假設(shè)網(wǎng)關(guān)服務(wù)端口為9000,應(yīng)用服務(wù)名為user)
法2:指定路徑轉(zhuǎn)發(fā)路由
application.yml示例
spring:
application:
name: futureGateway
cloud:
gateway:
routes:
- id: accountServiceRouter # 路由ID,保持唯一
uri: lb://accountService # 目標(biāo)服務(wù)地址
predicates: # 斷言(路由條件)
- Path=/account/**
- id: accountServiceRouter2 # 測試過濾器
uri: lb://accountService # 目標(biāo)服務(wù)地址
predicates: # 斷言(路由條件)
- Path=/client/account/**
filters: # 過濾器
- StripPrefix=1 # 截去路徑中的/client,剩余部分和uri拼接作為地址,數(shù)字代表要截去的位數(shù)
- id: emailServiceRouter
uri: http://127.0.0.1:8201
predicates:
- Path=/email/**id
在一個(gè)網(wǎng)關(guān)中,id要是唯一的,命名的時(shí)候方便區(qū)分即可。
uri
請(qǐng)求轉(zhuǎn)發(fā)的目標(biāo)地址,可以以http、https、lb和ws等為前綴。例如:
1.http方式 :
uri: http://localhost:8001/
2.lb(注冊(cè)中心中服務(wù)名字)方式 :
uri: lb://cloud-payment-service
以lb為前綴的時(shí)候表示這是一個(gè)動(dòng)態(tài)路由,GateWay會(huì)根據(jù)lb://后面的服務(wù)名稱從服務(wù)注冊(cè)中心中獲取服務(wù)實(shí)例,然后將請(qǐng)求轉(zhuǎn)發(fā)到具體的服務(wù)地址,實(shí)現(xiàn)負(fù)載均衡。
3.websocket方式 :
uri: ws://localhost:8001/
predicates
斷言。通過斷言可以設(shè)置一組路由條件,可以根據(jù)請(qǐng)求方式、請(qǐng)求頭、請(qǐng)求參數(shù)、請(qǐng)求主機(jī)和請(qǐng)求路徑等斷言進(jìn)行設(shè)置,通常我們使用請(qǐng)求路徑進(jìn)行設(shè)置,只要請(qǐng)求地址和Path中的地址匹配,就會(huì)將請(qǐng)求轉(zhuǎn)發(fā),多個(gè)路徑以逗號(hào)分隔,例如:
spring:
cloud:
gateway:
routes:
- id: path_route
uri: https://example.org
predicates:
- Path=/red/{segment},/blue/{segment}filters
過濾器。使用過濾器可以在網(wǎng)關(guān)轉(zhuǎn)發(fā)請(qǐng)求前和接收響應(yīng)后執(zhí)行一些操作,例如鑒權(quán)、限流等,例如StripPrefix可以去掉客戶端請(qǐng)求地址中的若干路徑,然后將剩余的路徑和uri中的地址拼接后轉(zhuǎn)發(fā)。
Filter分兩種,GatewayFilter和GlobalFilter,GatewayFilter應(yīng)用在單個(gè)路由上,GlobalFilter應(yīng)用在全局路由上。因?yàn)镚lobalFilter可以使所有的路由都生效,所以可以用來實(shí)現(xiàn)統(tǒng)一的鑒權(quán)、日志記錄等功能。
方案2:代碼配置
示例配置
@Configuration
public class GatewayConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
// 路由構(gòu)造器
RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();
// 設(shè)置路徑
routes.route("baidu_news_guonei_routh", r -> {
return r.path("/guonei").uri("http://news.baidu.com/guonei");
});
routes.route("baidu_news_guoji_routh", r -> {
return r.path("/guoji").uri("http://news.baidu.com/guoji");
});
return routes.build();
}
}到此這篇關(guān)于Spring cloud網(wǎng)關(guān)gateway進(jìn)行websocket路由轉(zhuǎn)發(fā)規(guī)則配置的文章就介紹到這了,更多相關(guān)Spring cloud網(wǎng)關(guān)gateway 路由轉(zhuǎn)發(fā)規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
RestClient?通過攔截器實(shí)現(xiàn)請(qǐng)求加密的示例
本文介紹了如何通過攔截器實(shí)現(xiàn)請(qǐng)求加密,并通過RestClient優(yōu)化了加密過程,傳統(tǒng)的加密方法依賴對(duì)象轉(zhuǎn)換和序列化處理,容易導(dǎo)致加密不一致或難以調(diào)試的問題,通過引入攔截器,可以直接操作請(qǐng)求體,避免了不必要的轉(zhuǎn)換步驟,確保加密過程與請(qǐng)求體完全一致,感興趣的朋友一起看看吧2025-02-02
淺談java調(diào)用Restful API接口的方式
這篇文章主要介紹了淺談java調(diào)用Restful API接口的方式,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
使用jd-gui反編譯修改jar包里的.class并重新生成新jar問題
這篇文章主要介紹了使用jd-gui反編譯修改jar包里的.class并重新生成新jar問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java關(guān)鍵字synchronized基本使用詳解
這篇文章主要給大家介紹了關(guān)于Java關(guān)鍵字synchronized基本使用的相關(guān)資料,synchronized可以用來同步靜態(tài)和非靜態(tài)方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
spring?boot配置dubbo方式(properties)
這篇文章主要介紹了spring?boot配置dubbo方式(properties),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Java設(shè)計(jì)模式之橋接模式詳解(Bridge Pattern)
橋接模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,旨在將抽象部分與其實(shí)現(xiàn)部分分離,從而使兩者可以獨(dú)立地變化,橋接模式通過組合關(guān)系代替繼承關(guān)系,將抽象和實(shí)現(xiàn)解耦,使代碼更具擴(kuò)展性和維護(hù)性2025-02-02
Java實(shí)戰(zhàn)角色權(quán)限后臺(tái)腳手架系統(tǒng)的實(shí)現(xiàn)流程
只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+Maven+myBaits-Plus+Vue+Element-UI+Mysql實(shí)現(xiàn)一個(gè)角色權(quán)限后臺(tái)腳手架系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2022-01-01
Java硬幣翻轉(zhuǎn)倍數(shù)遞增試算實(shí)例
這篇文章主要介紹了Java硬幣翻轉(zhuǎn)倍數(shù)遞增試算實(shí)例,有需要的朋友可以參考一下2013-12-12

