欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

SpringCloud的Web項(xiàng)目中如何使用Zuul

這篇文章給大家分享的是有關(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)站制作公司

Web項(xiàng)目中使用Zuul

關(guān)于Zuul

        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ò)濾、路由等功能。

Web項(xiàng)目整合Zuul

        新建一個(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è)試它的路由功能。

測(cè)試路由功能

        前一小節(jié)已經(jīng)建立了路由器項(xiàng)目,接下來(lái)建立源服務(wù)的項(xiàng)目,測(cè)試?yán)拥慕Y(jié)構(gòu)請(qǐng)見(jiàn)圖7-1所示。

Spring Cloud的Web項(xiàng)目中如何使用Zuul

圖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)行處理。

過(guò)濾器運(yùn)行機(jī)制

        前面例子的路由項(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中的生命周期。

Spring Cloud的Web項(xiàng)目中如何使用Zuul

圖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)

微信小程序開(kāi)發(fā)