亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Cloud集群怎么使用Zuul

發布時間:2021-12-24 10:29:15 來源:億速云 閱讀:136 作者:小新 欄目:云計算

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

Spring Cloud集群使用Zuul

        在前面小節的例子中,Zuul將請求轉發到一個Web項目進行處理,如果實際處理請求的不是一個Web項目,而是整個微服務集群,那么Zuul將成為整個集群的網關。在加入Zuul前,Spring Cloud集群的結構請見圖7-3。

Spring Cloud集群怎么使用Zuul

圖7-3 原來的Spring Cloud集群結構

        為微服務集群加入Zuul網關后,結構如圖7-4所示。

Spring Cloud集群怎么使用Zuul

圖7-4 加入Zuul后集群結構

        在深入學習Zuul前,先按圖7-4的搭建本章的測試項目。

集群搭建

        假設當前需要實現一個書本銷售業務,在銷售模塊中需要調用書本模塊的服務,用來查找書本,本小節案例以此為基礎,建立以下項目:

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

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

  • zuul-sale-service:銷售模塊,屬于服務調用者,對外發布銷售服務“/sale-book/{bookId}”,該服務中會調用zuul-book-service來查找Book,應用端口為9100,代碼目錄codes\07\03\zuul-sale-service。

        書本模塊“zuul-book-service”發布的服務,僅返回一個簡單的Book對象,控制器代碼如下:

    @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”發布的服務,相關代碼如下:

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

    /**
     * 調用書本服務的接口,獲取一個Book實例
     */
    @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) {
        // 調用book服務查找
        Book book = bookService.getBook(bookId);
        // 控制臺輸入,模擬進行銷售
        System.out.println("銷售模塊處理銷售,要銷售的圖書id: " + book.getId() + ", 書名:"
                + book.getName());
        // 銷售成功
        return "SUCCESS";
    }
}

        銷售模塊的服務,使用Feign來調用書本模塊的服務來獲取Book實例,然后在控制臺中輸出信息,在實際應用中,銷售的過程會更為復雜,例如有可能涉及支付等內容,本例為了簡單起見,僅作簡單的輸出。接下來,創建網關項目。

路由到集群服務

        在前一小節的基礎上,新建一個名稱為“zuul-gateway”的Maven項目(代碼目錄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>

        新建應用類,如代碼清單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);
    }
}

        應用類跟前面的例子一致,使用@EnableZuulProxy注解,但是,由于網關項目需要加入到集群中,因此要修改配置文件,讓其注冊到Eureka服務器中。本例的配置文件如代碼清單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的配置,將自己注冊到8761的Eureka中。在配置Zuul時,聲明所有的“/sale/**”請求,將會被轉發到Id為“zuul-sale-service”的服務進行處理。

        一般情況下,配置了serviceId后,在處理請求的“routing”階段,將會使用一個名稱為RibbonRoutingFilter的過濾器,該過濾器會調用Ribbon的API來實現負載均衡,默認情況下調用HttpClient來調用集群服務。

        按照以下順序啟動集群:

  • 啟動zuul-eureka-server(Eureka服務器)。

  • 啟動zuul-book-service(服務提供者)。

  • 啟動zuul-sale-service(服務調用者)。

  • 啟動zuul-gateway(集群網關)。

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

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

        根據輸出可知,銷售模塊、書本模塊均被調用。本例涉及了4個項目,圖7-5展示了本例的結構,可幫助讀者理解本例。

Spring Cloud集群怎么使用Zuul

圖7-5 本例的結構

Zuul Http客戶端

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定西市| 察雅县| 辽中县| 凉城县| 阿坝| 肥西县| 肃南| 平塘县| 兰溪市| 郓城县| 元谋县| 通渭县| 高雄市| 贵德县| 商洛市| 高青县| 石狮市| 双鸭山市| 商水县| 五指山市| 南宫市| 南皮县| 海兴县| 广南县| 双流县| 常山县| 肃南| 深水埗区| 夏邑县| 崇明县| 中山市| 含山县| 贡嘎县| 巴彦淖尔市| 彝良县| 五大连池市| 永年县| 庐江县| 梁山县| 织金县| 迁安市|