内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

SpringCloud集群怎么使用Zuul

這篇文章給大家分享的是有關(guān)Spring Cloud集群怎么使用Zuul的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)是一家專業(yè)提供資陽企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、HTML5、小程序制作等業(yè)務(wù)。10年已為資陽眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

Spring Cloud集群使用Zuul

        在前面小節(jié)的例子中,Zuul將請(qǐng)求轉(zhuǎn)發(fā)到一個(gè)Web項(xiàng)目進(jìn)行處理,如果實(shí)際處理請(qǐng)求的不是一個(gè)Web項(xiàng)目,而是整個(gè)微服務(wù)集群,那么Zuul將成為整個(gè)集群的網(wǎng)關(guān)。在加入Zuul前,Spring Cloud集群的結(jié)構(gòu)請(qǐng)見圖7-3。

Spring Cloud集群怎么使用Zuul

圖7-3 原來的Spring Cloud集群結(jié)構(gòu)

        為微服務(wù)集群加入Zuul網(wǎng)關(guān)后,結(jié)構(gòu)如圖7-4所示。

Spring Cloud集群怎么使用Zuul

圖7-4 加入Zuul后集群結(jié)構(gòu)

        在深入學(xué)習(xí)Zuul前,先按圖7-4的搭建本章的測(cè)試項(xiàng)目。

集群搭建

        假設(shè)當(dāng)前需要實(shí)現(xiàn)一個(gè)書本銷售業(yè)務(wù),在銷售模塊中需要調(diào)用書本模塊的服務(wù),用來查找書本,本小節(jié)案例以此為基礎(chǔ),建立以下項(xiàng)目:

  • zuul-eureka-server:Eureka服務(wù)器,應(yīng)用端口為8761,讀者可以到以下目錄取得源代碼:codes\07\03\zuul-eureka-server。

  • zuul-book-service:書本模塊,屬于服務(wù)提供者,提供“/book/{bookId}”服務(wù),用于查找圖書,最后返回Book的JSON字符串,應(yīng)用端口為9000,代碼目錄codes\07\03\zuul-book-service。

  • zuul-sale-service:銷售模塊,屬于服務(wù)調(diào)用者,對(duì)外發(fā)布銷售服務(wù)“/sale-book/{bookId}”,該服務(wù)中會(huì)調(diào)用zuul-book-service來查找Book,應(yīng)用端口為9100,代碼目錄codes\07\03\zuul-sale-service。

        書本模塊“zuul-book-service”發(fā)布的服務(wù),僅返回一個(gè)簡(jiǎn)單的Book對(duì)象,控制器代碼如下:

    @RequestMapping(value = "/book/{bookId}", method = RequestMethod.GET, 
            produces = MediaType.APPLICATION_JSON_VALUE)
    public Book findBook(@PathVariable Integer bookId) {
        Book book = new Book();
        book.setId(bookId);
        book.setName("Workflow講義");
        book.setAuthor("楊恩雄");
        return book;
    }

        銷售模塊“zuul-sale-service”發(fā)布的服務(wù),相關(guān)代碼如下:

@FeignClient("zuul-book-service") // 聲明調(diào)用書本服務(wù)
public interface BookService {

    /**
     * 調(diào)用書本服務(wù)的接口,獲取一個(gè)Book實(shí)例
     */
    @RequestMapping(method = RequestMethod.GET, value = "/book/{bookId}")
    Book getBook(@PathVariable("bookId") Integer bookId);
}

@RestController
public class SaleController {

    @Autowired
    private BookService bookService;

    @RequestMapping(value = "/sale-book/{bookId}", method = RequestMethod.GET)    public String saleBook(@PathVariable Integer bookId) {
        // 調(diào)用book服務(wù)查找
        Book book = bookService.getBook(bookId);
        // 控制臺(tái)輸入,模擬進(jìn)行銷售
        System.out.println("銷售模塊處理銷售,要銷售的圖書id: " + book.getId() + ", 書名:"
                + book.getName());
        // 銷售成功
        return "SUCCESS";
    }
}

        銷售模塊的服務(wù),使用Feign來調(diào)用書本模塊的服務(wù)來獲取Book實(shí)例,然后在控制臺(tái)中輸出信息,在實(shí)際應(yīng)用中,銷售的過程會(huì)更為復(fù)雜,例如有可能涉及支付等內(nèi)容,本例為了簡(jiǎn)單起見,僅作簡(jiǎn)單的輸出。接下來,創(chuàng)建網(wǎng)關(guān)項(xiàng)目。

路由到集群服務(wù)

        在前一小節(jié)的基礎(chǔ)上,新建一個(gè)名稱為“zuul-gateway”的Maven項(xiàng)目(代碼目錄codes\07\03\zuul-gateway),在pom.xml中加入以下依賴:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <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>

        新建應(yīng)用類,如代碼清單7-3所示。

        代碼清單7-3:

        codes\07\03\zuul-gateway\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);
    }
}

        應(yīng)用類跟前面的例子一致,使用@EnableZuulProxy注解,但是,由于網(wǎng)關(guān)項(xiàng)目需要加入到集群中,因此要修改配置文件,讓其注冊(cè)到Eureka服務(wù)器中。本例的配置文件如代碼清單7-4。

        代碼清單7-4:codes\07\03\zuul-gateway\src\main\resources\application.yml

spring:
  application:
    name: zuul-gateway
eureka:
  instance:
    hostname: localhost
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
zuul: 
  routes:
    sale:
      path: /sale/**
      serviceId: zuul-sale-service

        使用eureka的配置,將自己注冊(cè)到8761的Eureka中。在配置Zuul時(shí),聲明所有的“/sale/**”請(qǐng)求,將會(huì)被轉(zhuǎn)發(fā)到Id為“zuul-sale-service”的服務(wù)進(jìn)行處理。

        一般情況下,配置了serviceId后,在處理請(qǐng)求的“routing”階段,將會(huì)使用一個(gè)名稱為RibbonRoutingFilter的過濾器,該過濾器會(huì)調(diào)用Ribbon的API來實(shí)現(xiàn)負(fù)載均衡,默認(rèn)情況下調(diào)用HttpClient來調(diào)用集群服務(wù)。

        按照以下順序啟動(dòng)集群:

  • 啟動(dòng)zuul-eureka-server(Eureka服務(wù)器)。

  • 啟動(dòng)zuul-book-service(服務(wù)提供者)。

  • 啟動(dòng)zuul-sale-service(服務(wù)調(diào)用者)。

  • 啟動(dòng)zuul-gateway(集群網(wǎng)關(guān))。

        在瀏覽器中訪問:http://localhost:8080/sale/sale-book/1,返回“SUCCESS”字符串,在銷售模塊的控制臺(tái),可以看到輸出如下:

銷售模塊處理銷售,要銷售的圖書id: 1, 書名:Workflow講義

        根據(jù)輸出可知,銷售模塊、書本模塊均被調(diào)用。本例涉及了4個(gè)項(xiàng)目,圖7-5展示了本例的結(jié)構(gòu),可幫助讀者理解本例。

Spring Cloud集群怎么使用Zuul

圖7-5 本例的結(jié)構(gòu)

Zuul Http客戶端

        我們知道,Ribbon用來實(shí)現(xiàn)負(fù)載均衡,Ribbon在選取了合適的服務(wù)器后,再調(diào)用REST客戶端API來調(diào)用集群服務(wù)。在默認(rèn)情況下,將使用HttpClient的API來調(diào)用集群服務(wù)。除了HttpClient外,還可以使用OkHttpClient,以及com.netflix.niws.client.http.RestClient,RestClient目前已經(jīng)不推薦使用,如果想啟用OkHttpClient,可以添加以下配置:ribbon.okhttp.enabled=true。除了該配置外,還要在pom.xml中加入OkHttpClient的依賴:

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
        </dependency>

感謝各位的閱讀!關(guān)于“Spring Cloud集群怎么使用Zuul”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

本文標(biāo)題:SpringCloud集群怎么使用Zuul
網(wǎng)頁地址:http://www.rwnh.cn/article26/jgjscg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)站導(dǎo)航、軟件開發(fā)、移動(dòng)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、App設(shè)計(jì)

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

泉州市| 会宁县| 广昌县| 南华县| 夏邑县| 泰安市| 济南市| 锡林浩特市| 延津县| 黄大仙区| 贡觉县| 汝州市| 日照市| 茌平县| 安国市| 洛南县| 莱芜市| 湘潭市| 定日县| 河曲县| 孙吴县| 陵水| 分宜县| 潜山县| 依安县| 东城区| 郑州市| 南阳市| 金溪县| 宁南县| 榆中县| 景宁| 滦平县| 安龙县| 体育| 贵溪市| 大余县| 余江县| 香格里拉县| 延庆县| 忻城县|