<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringCloud 之 Zuul 網(wǎng)關(guān)搭建及配置

          共 4882字,需瀏覽 10分鐘

           ·

          2020-11-13 19:44

          點(diǎn)擊上方藍(lán)色“小哈學(xué)Java”,選擇“設(shè)為星標(biāo)

          回復(fù)“資源”獲取獨(dú)家整理的學(xué)習(xí)資料!

          作者:Anakki

          blog.csdn.net/qq_29519041/article/details/103654564

          一.Zuul網(wǎng)關(guān)

          網(wǎng)關(guān),是一種網(wǎng)絡(luò)關(guān)口,既然是關(guān)口,就需要知道哪些東西能通過哪些東西不能通過。

          在微服務(wù)中,Zuul是SpringCloud眾多組件中的一個(gè),用于微服務(wù)的網(wǎng)關(guān)。在微服務(wù)中,各自服務(wù)之間的調(diào)用不可能都在各自服務(wù)中來實(shí)現(xiàn)安全與認(rèn)證功能,因此需要一個(gè)專門的微服務(wù)來提供這些功能。

          當(dāng)請求從客服端發(fā)到服務(wù)器,如果經(jīng)過網(wǎng)關(guān)的一系列驗(yàn)證和過濾符合訪問要求,那么在之后訪問其他微服務(wù)或由網(wǎng)關(guān)路由轉(zhuǎn)發(fā)之后的訪問時(shí),不需要再做同樣的安全認(rèn)證。這是網(wǎng)關(guān)的主要功能。

          實(shí)際上,Zuul給我們提供的網(wǎng)關(guān)服務(wù)種類是很多的。后面會(huì)介紹他的一些功能。

          二.Zuul服務(wù)的前期準(zhǔn)備

          2.1 注冊中心EurekaServer的搭建

          為了搭建好網(wǎng)關(guān)后,能通過網(wǎng)關(guān)來訪問各模塊微服務(wù)來證明網(wǎng)關(guān)的搭建成功,因此這里需要提前搭建一些可用的微服務(wù)。第一步我們先新建一個(gè)Project

          選擇Springboot作為啟動(dòng)器,微服務(wù)的標(biāo)配。

          當(dāng)然你用Maven的骨架來搭建也完全可以,構(gòu)建項(xiàng)目并沒有非要用哪一種方式搭建。重要的是后面你知道pom里應(yīng)該引入那些依賴,application.yml怎么配置。這些才是搭建微服務(wù)需要主要的地方。這里我使用Spring Initializr

          idea給你默認(rèn)的內(nèi)容如下:

          Group和Artifact我們已經(jīng)見得太多了,當(dāng)我們指定這兩個(gè)參數(shù)時(shí),項(xiàng)目名和包名應(yīng)該與之適配。不過當(dāng)然可以不一樣。

          比如默認(rèn)值 Group為com.example,Artifact為demo,那么項(xiàng)目名應(yīng)該為demo和Artifact一致,包名Package應(yīng)該為com.example.demo,為Group和Artifact的合體 。

          當(dāng)然這里不強(qiáng)制,只是一種規(guī)范,比如別人看見你的包名為com.example.demo時(shí),立馬可以知道他屬于com.example組下的demo項(xiàng)目。一些使用語言,Java版本,項(xiàng)目類型啥的。

          在這里因?yàn)槲沂亲鳛闇y試springcloud相關(guān)組件的目的,那么我這里設(shè)置如下:

          細(xì)心的朋友會(huì)發(fā)現(xiàn),當(dāng)我們改完1和2,idea會(huì)自動(dòng)給我們修改3和4選項(xiàng),既然是規(guī)范idea當(dāng)然希望大家準(zhǔn)守。改完1和2,我們點(diǎn)擊Next。這一步相當(dāng)于選擇這個(gè)項(xiàng)目需要的一些組件,比如這個(gè)項(xiàng)目你需要用到springmvc?Mybatis?MySQL?那么在這里選擇后,idea會(huì)去加載這些相關(guān)的依賴并在pom里為大家自動(dòng)引入這些依賴。

          這里我們要搭建一些測試的微服務(wù),首先搭建1個(gè)Eureka注冊中心。所有的微服務(wù)都需要在這里注冊。

          如上圖選擇Eureka Server,點(diǎn)Next,如下圖,項(xiàng)目為zuul,而模組這里我們先搭建微服務(wù)的注冊中心Eureka Server,所以這里我把模組名命名為eurekaserver,繼續(xù)點(diǎn)Next。改了模組名,idea會(huì)默認(rèn)在項(xiàng)目目錄下建立模組的文件夾,因此可以看見第二個(gè)紅框自動(dòng)變化。繼續(xù)點(diǎn)下一步。

          因?yàn)槲抑坝许?xiàng)目所以這里選擇開啟新的idea窗口。New Window

          點(diǎn)擊import change之后等待idea加載依賴

          查看項(xiàng)目結(jié)構(gòu):

          此時(shí)我習(xí)慣把a(bǔ)pplication.properties后綴改為yml。這樣配置書寫的格式符合yml的風(fēng)格,比較好看。

          現(xiàn)在需要做下面幾件事,由于我們開始構(gòu)建項(xiàng)目時(shí)選擇了Eureka Server,所以pom.xml中不需要手動(dòng)添加依賴了。

          首先在啟動(dòng)類SpringcloudApplication中添加EurekaServer的注解:@EnableEurekaServer

          然后在application.yml中添加相關(guān)配置:

          server:
          ??port:?9000??#eureka注冊中心服務(wù)端口
          ?
          eureka:
          ??instance:
          ????hostname:?localhost
          ??client:
          ????register-with-eureka:?false?#不向eureka注冊中心注冊。也就是為了關(guān)閉自己向自己注冊,eureka默認(rèn)要向自己注冊
          ????fetch-registry:?false
          ????service-url:
          ??????defaultZone:?http://${eureka.instance.hostname}:${server.port}/eureka/

          就可以啟動(dòng)服務(wù)了:

          訪問注冊中心:按照配置的端口號訪問。我這里配了9000,端口隨意,如下圖代表Eureka注冊中心部署成功了。

          顯示沒有實(shí)例在此中心注冊。沒事接下來我們開始配置zuul網(wǎng)關(guān),它也是一個(gè)服務(wù)需要注冊到此注冊中心來。

          2.2 EurekaService的搭建

          有了注冊中心,我們現(xiàn)在需要搭建服務(wù)的真正提供者,EurekaService,第四節(jié)我們建四個(gè)。

          eurekaservice01,eurekaservice02,eurekaservice03,eurekaservice04,第一個(gè)如下,第二三四個(gè)按著第一個(gè)的建,修改一下名字,端口號還有方法返回值。

          需要用到mvc

          服務(wù)提供者同樣需要注冊到注冊中心。

          改名你懂得

          完成:

          接下來是同樣的套路,改yml,啟動(dòng)類添加注解:@EnableEurekaClient

          yml配置如下(因?yàn)槭菧y試所有很簡陋):

          server:
          ??port:?8900?#?服務(wù)提供方
          ?
          #?指定當(dāng)前eureka客戶端的注冊地址,
          eureka:
          ??client:
          ????service-url:
          ??????defaultZone:?http://${eureka.instance.hostname}:9000/eureka/
          ??instance:
          ????hostname:?localhost
          ?
          #當(dāng)前服務(wù)名稱
          spring:
          ??application:
          ????name:?eurekaservice1

          注意當(dāng)前服務(wù)名稱。這里用于注冊到注冊中心的名字,還可以啟動(dòng)很多同樣為eurekaservice1的名字的微服務(wù)到注冊中心,zuul從注冊中心Eureka Server獲取所有服務(wù)名為eurekaservice01的服務(wù)列表后,會(huì)采用負(fù)載均衡策略訪問其中一臺(tái)服務(wù)提供者獲取資源。

          下圖我們之前zuul中的配置serviceId就是指向這里的服務(wù)名稱,這是微服務(wù)調(diào)用的精髓,通過服務(wù)名調(diào)用。

          既然是服務(wù)提供者 ,這里要編寫controller類了:新建controller包,新建Test01類,編寫REST的方法。返回服務(wù)1

          按照服務(wù)提供者1的搭建方式,現(xiàn)在搭建服務(wù)提供者2:

          同樣是新建模組,名字改為...02,yml配置文件中端口號與服務(wù)1要不同,服務(wù)名稱相同,為了測試負(fù)載均衡,REST方法返回值設(shè)為服務(wù)2。

          yml:

          server:
          ??port:?8901?#?服務(wù)提供方
          ?
          #?指定當(dāng)前eureka客戶端的注冊地址,
          eureka:
          ??client:
          ????service-url:
          ??????defaultZone:?http://${eureka.instance.hostname}:9000/eureka/
          ??instance:
          ????hostname:?localhost
          ?
          #當(dāng)前服務(wù)名稱
          spring:
          ??application:
          ????name:?eurekaservice1

          同樣的方法再建兩個(gè)服務(wù)提供者3和4,服務(wù)名稱都為eurekaservice2,端口號分別為8902,和8903。REST方法返回值分別為,服務(wù)3和服務(wù)4。

          三.Zuul服務(wù)搭建

          有了第二節(jié)的準(zhǔn)備,搭建了注冊中心,和服務(wù)的提供者,我們現(xiàn)在開始搭建Zuul網(wǎng)關(guān)服務(wù),最后通過zuul訪問注冊中心獲取服務(wù)列表,然后訪問服務(wù)提供者。

          新建模組:

          這里模組名設(shè)為zuul。包名設(shè)置為zuul,等會(huì)生成的啟動(dòng)類就會(huì)是帶有zuul了。EurekaServer也可以這樣只是我開始搭的時(shí)候沒有注意到。

          需要Eureka的客戶端組件,和zuul組件,點(diǎn)next

          模組名設(shè)為zuul,不強(qiáng)制

          項(xiàng)目結(jié)構(gòu):

          在啟動(dòng)類配置注解?@EnableEurekaClient,@EnableZuulProxy,@EnableZuulProxy可以稱為@EnableZuulServer的增強(qiáng)版,當(dāng)Zuul與Eureka、Ribbon等組件配合使用時(shí),我們使用@EnableZuulProxy。

          配置pom文件:

          server:port:?9100spring:application:name:?zuuleureka:client:service-url:defaultZone:?http://localhost:9000/eureka/?#當(dāng)前zuul網(wǎng)關(guān)想要注冊到哪個(gè)注冊中心這里注冊到之前搭的9000上。#路由規(guī)則定義。這里定義兩種路由規(guī)則route1和route2#,代表訪問網(wǎng)關(guān)/test01/**或/test02/**時(shí)。#路由到服務(wù)名為 eurekaservice1或 eureka#service2中的服務(wù)集群去。zuul:routes:route1:path:?/test01/\*\*serviceId: eurekaservice1route2:path:?/test02/\*\*serviceId: eurekaservice2

          啟動(dòng)項(xiàng)目:

          聰明的你再去注冊中心看就能看見zuul服務(wù)已經(jīng)被注冊到注冊中心了

          有了網(wǎng)關(guān),

          五.Zuul的訪問

          我們有一個(gè)網(wǎng)關(guān)服務(wù)zuul,一個(gè)注冊中心eurekaserver,4個(gè)服務(wù)提供者eurekaservice,4個(gè)服務(wù)提供者,其中兩個(gè)提供

          服務(wù)名為eurekaservice1的服務(wù),另外兩個(gè)提供eurekaservice2的服務(wù),現(xiàn)在我們來啟動(dòng)4個(gè)服務(wù)提供者,在注冊中心查看,并通過網(wǎng)關(guān)訪問測試網(wǎng)關(guān)的服務(wù)是否正常。

          總項(xiàng)目結(jié)構(gòu):

          啟動(dòng)后注冊中心查看:

          如之前所想,兩個(gè)服務(wù)名下各兩臺(tái)服務(wù)提供者。

          現(xiàn)在回想之前zuul的路由配置:

          那么我訪問zuul網(wǎng)關(guān)的test01/**下的任何服務(wù)都會(huì)給我轉(zhuǎn)發(fā)到服務(wù)名為eurekaservice1下的01和02服務(wù)下。我們來試試

          第一次訪問:test01

          第二次訪問:test01

          可以看見zuul網(wǎng)關(guān)做了轉(zhuǎn)發(fā)和負(fù)載均衡,使用的是ribbon輪詢的方式負(fù)載均衡。

          那么可以猜想到我們訪問test02,zuul網(wǎng)關(guān)會(huì)在服務(wù)名為eurekaservice2的服務(wù)3和服務(wù)4之間去訪問了。我們來看看:

          至此我們已經(jīng)實(shí)踐完成zuul網(wǎng)關(guān)的基本功能轉(zhuǎn)發(fā)和負(fù)載均衡。


          題外話: 目前小哈正在個(gè)人博客(新搭建的網(wǎng)站,域名就是犬小哈的拼音)?www.quanxiaoha.com?上更新《Go語言教程》,畢竟Go自帶天然的并發(fā)優(yōu)勢,后端的同學(xué)還是要學(xué)一下的,這個(gè)教程系列小哈會(huì)一直更新下去,目前已經(jīng)更新到 Go語言的基礎(chǔ)語法了,歡迎小伙伴們訪問哦~

          END


          有熱門推薦?

          1.?2020 年 11 月編程語言排行榜,Python 超越 Java ?

          2.?基于 token 的多平臺(tái)身份認(rèn)證架構(gòu)設(shè)計(jì)

          3.?從零搭建 Spring Cloud 服務(wù)(超級詳細(xì))

          4.?一份 Spring Boot 項(xiàng)目搭建模板 ~

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

          謝謝支持喲 (*^__^*)

          瀏覽 26
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产午夜精品一区二区芒果视频 | 久久狼友 | 日本不卡无码视频 | 人妻 日韩 欧美 综合 晨跑 | 丝瓜污视频在线观看 |