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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

springcloud 之 路由网关 zuul

發(fā)布時(shí)間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springcloud 之 路由网关 zuul 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

話不多說(shuō),先上圖(圖是丑陋了點(diǎn),大家別介意哈),這幅圖是我根據(jù)公司現(xiàn)有的業(yè)務(wù)設(shè)計(jì)出來(lái)的一個(gè)簡(jiǎn)單的基于springcloud微服務(wù)架構(gòu)圖。


????在springcloud微服務(wù)體系中,我們一般不對(duì)外直接暴露服務(wù)層的接口,而是中間通過(guò)一層代理進(jìn)行中轉(zhuǎn),這層代理的好處一個(gè)是對(duì)外可以隱藏我們內(nèi)部具體服務(wù)的接口,另一個(gè)就是我們非常重要的服務(wù)的負(fù)載均衡,在上圖中客戶端的所有請(qǐng)求先經(jīng)過(guò)nginx(Nginx集群)經(jīng)由nginx代理轉(zhuǎn)發(fā)后進(jìn)入springcloud的zuul(zuul集群)路由網(wǎng)關(guān)服務(wù),由zuul再去對(duì)應(yīng)具體的服務(wù);我們的所有服務(wù)均統(tǒng)一注冊(cè)到高可用的服務(wù)注冊(cè)發(fā)現(xiàn)(eureka server)集群中。

首先介紹一下zuul的功能:

zuul的主要功能是路由轉(zhuǎn)發(fā)和過(guò)濾器。路由功能是微服務(wù)的一部分,比如/frnt轉(zhuǎn)發(fā)到到frnt服務(wù),/portal轉(zhuǎn)發(fā)到portal服務(wù)。zuul默認(rèn)和Ribbon結(jié)合實(shí)現(xiàn)了負(fù)載均衡的功能。

好啦,正式開(kāi)工!

1.首先創(chuàng)建一個(gè)項(xiàng)目xx-zuul(名字任意取),引入相關(guān)依賴(spring-cloud-starter-netflix-zuul):

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <!--eureka client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>

2.打開(kāi)application-dev.properties并加入以下內(nèi)容:

#端口 server.port=8763 #實(shí)例名 spring.application.name=xx-zuul #注冊(cè)中心 eureka.server.host=localhost eureka.server.port=8761 eureka.client.service-url.defaultZone=http://${eureka.server.host}:${eureka.server.port}/eureka/ #路由規(guī)則配置 #攔截路徑 zuul.routes.demo-springboot.path=/demo/** #eureka中注冊(cè)的實(shí)例名 zuul.routes.demo-springboot.serviceId=demo-springboot #實(shí)際訪問(wèn)時(shí)去除前綴(即:經(jīng)過(guò)zuul轉(zhuǎn)發(fā)后會(huì)去除掉demo前綴) zuul.routes.demo-springboot.stripPrefix=true #連接超時(shí)時(shí)間 zuul.host.connect-timeout-millis=15000 zuul.host.socket-timeout-millis=10000 #log level logging.level.root=debug #開(kāi)啟eureka client健康檢查 eureka.client.healthcheck=true # 續(xù)約到期時(shí)間(默認(rèn)90秒) eureka.instance.lease-expiration-duration-in-seconds=30 # 續(xù)約更新時(shí)間間隔(默認(rèn)30秒) eureka.instance.lease-renewal-interval-in-seconds=10

3.開(kāi)啟zuul代理注解@EnableZuulProxy

@EnableZuulProxy @EnableEurekaClient @SpringBootApplication public class Xsignal2ZuulApplication {public static void main(String[] args) {SpringApplication.run(Xsignal2ZuulApplication.class, args); } }

4.最后啟動(dòng)xx-zuul服務(wù),demo-springboot服務(wù),在eureka控制面板查看:



打開(kāi)瀏覽器準(zhǔn)備訪問(wèn)zuul代理:


看到如圖結(jié)果表示我們的zuul代理已經(jīng)生效,成功訪問(wèn)到了demo-springboog項(xiàng)目,慶賀一下吧!

另外,文章開(kāi)頭說(shuō)道zuul支持過(guò)濾功能,即我們可以通過(guò)自定義filter繼承自ZuulFilter即可:

@Component public class MyFilter extends ZuulFilter {/*filterType:返回一個(gè)字符串代表過(guò)濾器的類型,在zuul中定義了四種不同生命周期的過(guò)濾器類型,具體如下: pre:路由之前 routing:路由之時(shí) post: 路由之后 error:發(fā)送錯(cuò)誤調(diào)用 filterOrder:過(guò)濾的順序 shouldFilter:這里可以寫邏輯判斷,是否要過(guò)濾,本文true,永遠(yuǎn)過(guò)濾。 run:過(guò)濾器的具體邏輯。可用很復(fù)雜,包括查sqlnosql去判斷該請(qǐng)求到底有沒(méi)有權(quán)限訪問(wèn)。 */ private static Logger log = LoggerFactory.getLogger(MyFilter.class); @Override public String filterType() {return FilterConstants.PRE_TYPE; }@Override public int filterOrder() {return 0; }@Override public boolean shouldFilter() {return true; }@Override public Object run() {RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); Object accessToken = request.getParameter("token"); if(accessToken == null) {log.warn("token is empty"); ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); try {ctx.getResponse().getWriter().write("token is empty"); }catch (Exception e){}return null; } return null; } }在filter中我們可以自定義需要過(guò)濾的請(qǐng)求,攔截非法請(qǐng)求,權(quán)限認(rèn)證,頻控,限流等操作! 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的springcloud 之 路由网关 zuul的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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