Spring Cloud Zuul 快速入門

Spring Cloud Zuul 實現了路由規則與實例的維護問題,經過 Spring Cloud Eureka 進行整合,將自身註冊爲 Eureka 服務治理下的應用,同時從 Eureka 中獲取了全部其餘微服務的實例信息,這樣的設計很是巧妙的將服務治理體系中維護的實例信息利用起來,使得維護服務實例的工做交給了服務治理框架自動完成,而對路由規則的維護,默認會將經過以服務名做爲 ContextPath 的方式來建立路由映射,也能夠作一些特別的配置,對於簽名校驗、登陸校驗等在微服務架構中的冗餘問題,邏輯上來講,本質上和微服務應用自身的業務並無多大的關係,因此他們徹底能夠獨立成一個單獨的服務存在,只是他們被剝離和獨立出來以後,是在 API 網關統一調用來對微服務接口作前置過濾,以實現對微服務接口的攔截和校驗。Spring Cloud Zuul 提供了一套過濾機制,能夠很好的支持這樣的任務,開發者能夠經過使用 Zuul 來建立各類校驗過濾器,而後指定哪些規則的請求須要執行校驗邏輯,只有經過校驗的纔會被路由到具體的微服務接口,使得咱們的微服務應用能夠更專一與業務邏輯的開發,同時微服務的自動化測試也變得更容易實現。 java

快速入門 spring

  • 建立一個基礎的 Spring Boot 工程,命名爲 gateway-zuul,並在 pom.xml 中引入 spring-cloud-starter-zuul 依賴,具體以下:

    <?xml version="1.0" encoding="UTF-8"?>apache

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"api

        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">架構

        <modelVersion>4.0.0</modelVersion>app

       

        <groupId>org.lixue</groupId>負載均衡

        <artifactId>gateway-zuul</artifactId>框架

        <version>0.0.1-SNAPSHOT</version>運維

        <packaging>jar</packaging>socket

        <name>gateway-zuul</name>

   

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>1.5.6.RELEASE</version>

        <relativePath/> <!-- lookup parent from repository -->

    </parent>

   

    <properties>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <java.version>1.8</java.version>

        <spring-cloud.version>Dalston.SR3</spring-cloud.version>

    </properties>

   

    <dependencies>

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-starter-zuul</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

        </dependency>

    </dependencies>

   

    <dependencyManagement>

        <dependencies>

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-dependencies</artifactId>

                <version>${spring-cloud.version}</version>

                <type>pom</type>

                <scope>import</scope>

            </dependency>

        </dependencies>

    </dependencyManagement>

  </project>

對於 Spring-Cloud-starter-zuul 依賴,能夠經過查看他的依賴內容瞭解到,該模塊不只包含了 zuul-core 核心依賴,還包括了一下重要依賴:

  • spring-cloud-starter-hystrix:該依賴用來在網關服務中實現對微服務轉發時候的保護機制,經過線程隔離和斷路器,防止微服務的故障引起 API 網關資源沒法釋放,從而影響其餘應用的對外服務
  • spring-cloud-starter-ribbon:該依賴用來實如今網關服務進行路由轉發時候,客戶端負載均衡以及請求重試。
  • spring-boot-starter-actuator:該依賴用來提供常規的微服務管理端點,在 Spring Cloud Zuul 中還提供了 /routes 端點來返回當前的全部路由規則
  • 建立應用主類 GatewayZuulApplication ,使用 @EnableZuulProxy 註解開啓Zuul的API網關服務功能,代碼以下:

    @EnableZuulProxy

    @SpringBootApplication

    public class GatewayZuulApplication {

       

            public static void main(String[] args) {

                    SpringApplication.run(GatewayZuulApplication.class, args);

            }

    }

  • application.yml 中配置 Zuul 應用的基礎信息,好比應用名稱、端口號等,具體內容以下:

    server:

        port: 9300

    spring:

        application:

            name: gateway-zuul

    完成上面的步驟,基本的 Zuul 實現的 API 網關服務就構建完成了,下面將增長請求路由相關配置。

請求路由

傳統路由方式

使用 Spring Cloud Zuul 實現路由功能很是簡單,只須要增長一些關於路由的配置,就能實現傳統的路由轉發功能,好比:

zuul:

    routes:

        api:

            path: /api/**

            url: http://localhost:8080

該配置定義了發往 API 網關服務的請求中,全部符合 /api/** 規則的訪問都被路由轉發到 http://localhost:8080 地址上,配置屬性中的 api 部分爲路由的名字,能夠任意定義,可是一組 path url 映射關係的路由名要相同。

面向服務的路由

傳統的路由配置方式對於咱們來講並不友好,須要運維人員花費大量的時間來維護各個路由 path url 的關係,爲了解決這個問題 Spring Cloud Zuul 實現了與 Spring Cloud Eureka 的無縫整合,咱們可讓路由的 path 不是映射具體的url,而是讓映射到具體的服務,而具體的 url 則交給 Eureka 的服務發現機制去自動維護。

  • 爲了與 Eureka 整合,咱們須要增長 spring-cloud-starter-eureka 依賴,具體以下:

            <dependency>

                <groupId>org.springframework.cloud</groupId>

                <artifactId>spring-cloud-starter-eureka</artifactId>

            </dependency>

    調整在 application.yml 中配置,增長 eureka 的註冊中心的配置,並配置服務路由,具體以下:

    eureka:

        client:

            service-url:

                defaultZone: http://eurekaserver2:9002/eureka,http://eurekaserver1:9001/eureka

    zuul:

        routes:

            api:

                path: /api/**

                serviceId: org.lixue.helloworld

            consumer:

                path: /consumer/**

                serviceId: eureka-feign-consumer

    # 增長 zuul 超時相關

        host:

            connect-timeout-millis: 10000

            socket-timeout-millis: 5000

    # 增長斷路器超時時間

    hystrix:

            command:

                    default:

                            execution:

                                    isolation:

                                            thread:

                                                    timeoutInMilliseconds: 60000

經過面向服務的路由配置方式,咱們不須要再爲各個路由維護微服務應用的具體實例的位置,而是經過簡單的path 與 serviceId 的映射組成,是的維護供桌變得很是簡單。

相關文章
相關標籤/搜索