這篇文章給大家分享的是有關(guān)Spring Cloud的Web項(xiàng)目中如何使用Zuul的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
我們提供的服務(wù)有:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、船營(yíng)ssl等。為近千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的船營(yíng)網(wǎng)站制作公司
Spring Cloud集群提供了多個(gè)組件,用于進(jìn)行集群內(nèi)部的通信,例如服務(wù)管理組件Eureka,負(fù)載均衡組件Ribbon。如果集群提供了API或者Web服務(wù),需要與外部進(jìn)行通信,比較好的方式是添加一個(gè)網(wǎng)關(guān),將集群的服務(wù)都隱藏到網(wǎng)關(guān)后面。這樣的做法,對(duì)于外部客戶端來(lái)說(shuō),無(wú)需關(guān)心集群的內(nèi)部結(jié)構(gòu),只需關(guān)心網(wǎng)關(guān)的位置等信息;對(duì)于Spring Cloud集群來(lái)說(shuō),不必過(guò)多的暴露服務(wù),提升了集群的安全性。
代理層作為應(yīng)用集群的大門(mén),在技術(shù)選取上尤為重要,很多傳統(tǒng)的解決方案,在軟件上選擇了Nginx、Apache等服務(wù)器。Netflix提供了自己的解決方案:Zuul。Zuul是Netflix的一個(gè)子項(xiàng)目,Spring Cloud將Zuul做進(jìn)一步的實(shí)現(xiàn)與封裝,整合到spring-netflix項(xiàng)目中,為微服務(wù)集群提供過(guò)代理、過(guò)濾、路由等功能。
新建一個(gè)名稱為“first-router”的Maven項(xiàng)目,項(xiàng)目使用的依賴如下:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.3</version> </dependency>
需要加入“spring-cloud-starter-zuul”的依賴,由于Zuul底層使用了HttpClient,因此還要加入相應(yīng)的依賴。為了能讓W(xué)eb項(xiàng)目開(kāi)啟對(duì)Zuul的支持,在應(yīng)用類中加入@EnableZuulProxy注解,請(qǐng)見(jiàn)代碼清單7-1。
代碼清單7-1:
codes\07\02\first-router\src\main\java\org\crazyit\cloud\GatewayApplication.java
@EnableZuulProxy @SpringBootApplication public class GatewayApplication { public static void main(String[] args) { new SpringApplicationBuilder(GatewayApplication.class).properties( "server.port=8080").run(args); } }
注意該項(xiàng)目的啟動(dòng)端口為8080。完成以上工作后,一個(gè)擁有Zuul功能的Web項(xiàng)目已經(jīng)建立,接下來(lái),將測(cè)試它的路由功能。
前一小節(jié)已經(jīng)建立了路由器項(xiàng)目,接下來(lái)建立源服務(wù)的項(xiàng)目,測(cè)試?yán)拥慕Y(jié)構(gòu)請(qǐng)見(jiàn)圖7-1所示。
圖7-1 測(cè)試?yán)咏Y(jié)構(gòu)圖
新建名稱為“book-server”的Maven項(xiàng)目,該項(xiàng)目是一個(gè)最普通的Spring Boot項(xiàng)目,使用以下的依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.4.RELEASE</version> </dependency>
為“book-server”添加一個(gè)“/hello”的服務(wù),項(xiàng)目的啟動(dòng)類以及控制器,請(qǐng)見(jiàn)代碼清單7-2。
代碼清單7-2:codes\07\02\book-server\src\main\java\org\crazyit\cloud\BookApplication.java
@SpringBootApplication @RestController public class BookApplication { @RequestMapping(value = "/hello/{name}", method = RequestMethod.GET) public String hello(@PathVariable String name) { return "hello " + name; } public static void main(String[] args) { new SpringApplicationBuilder(BookApplication.class).properties( "server.port=8090").run(args); } }
為了簡(jiǎn)單起見(jiàn),本例將啟動(dòng)類與控制器寫(xiě)到一起,注意“book-server”的端口為8090。在控制器中,建立了一個(gè)“/hello/{name}”的服務(wù),成功調(diào)用后,會(huì)返回相應(yīng)的字符串。接下來(lái),修改“first-router”項(xiàng)目的配置文件,讓其進(jìn)行轉(zhuǎn)發(fā)工作。
修改“first-router”項(xiàng)目的application.yml文件,加入以下內(nèi)容:
zuul: routes: books: url: http://localhost:8090
加入以上配置后,發(fā)送給http://localhost:8080/books的所有請(qǐng)求,都會(huì)被轉(zhuǎn)發(fā)到8090端口,也就是訪問(wèn)“first-router”項(xiàng)目,實(shí)際上最終會(huì)調(diào)用“book-server”的服務(wù)。啟動(dòng)兩個(gè)應(yīng)用,在瀏覽器中輸入以下地址:http://localhost:8080/books/hello/crazyit,可以看到瀏覽器輸出如下:
hello crazyit
根據(jù)輸出結(jié)果可知,發(fā)送的請(qǐng)求已經(jīng)被轉(zhuǎn)發(fā)到“book-server”進(jìn)行處理。
前面例子的路由項(xiàng)目,我們使用了@EnableZuulProxy注解,開(kāi)啟該注解后,在Spring容器初始化時(shí),會(huì)將Zuul的相關(guān)配置初始化,其中包含一個(gè)Spring Boot的bean:ServletRegistrationBean,該類主要用于注冊(cè)Servlet。Zuul提供了一個(gè)ZuulServlet類,在Servlet的service方法中,執(zhí)行各種Zuul過(guò)濾器(ZuulFilter)。圖7-2為HTTP請(qǐng)求在ZuulServlet中的生命周期。
圖7-2 HTTP請(qǐng)求的生命周期
ZuulServlet的service方法接收到請(qǐng)求后,會(huì)執(zhí)行“pre”階段的過(guò)濾器,再執(zhí)行“routing”階段的過(guò)濾器,最后執(zhí)行“post”階段的過(guò)濾器。其中“routing”的過(guò)濾器,會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到“源服務(wù)”,源服務(wù)可以是第三方的Web服務(wù),也可以是Spring Cloud的集群服務(wù)。在執(zhí)行pre和routing階段的過(guò)濾器時(shí),如果出現(xiàn)異常,則會(huì)執(zhí)行“error”過(guò)濾器。整個(gè)過(guò)程的HTTP請(qǐng)求、HTTP響應(yīng)、狀態(tài)等數(shù)據(jù),都會(huì)封裝到一個(gè)RequestContext的對(duì)象中,這將在后面章節(jié)中講述。
感謝各位的閱讀!關(guān)于“Spring Cloud的Web項(xiàng)目中如何使用Zuul”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
網(wǎng)頁(yè)標(biāo)題:SpringCloud的Web項(xiàng)目中如何使用Zuul
新聞來(lái)源:http://chinadenli.net/article28/gogsjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、、網(wǎng)站收錄、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站策劃、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)