Zuul 詳解,帶視頻


《SpringCloud Nginx 高併發核心編程》 環境搭建 圖文教程和演示視頻:面試

組件 連接地址
【必須】 虛擬機Linux 開發環境準備 windows vmware 擴展硬盤 + 共享文件
Linux openresty 安裝 Linux openresty 安裝
【必須】Linux Redis 安裝(帶視頻) Linux Redis 安裝(帶視頻)
【必須】Linux Zookeeper 安裝(帶視頻) Linux Zookeeper 安裝, 帶視頻
Windows Redis 安裝(帶視頻) Windows Redis 安裝(帶視頻)
RabbitMQ 離線安裝(帶視頻) RabbitMQ 離線安裝(帶視頻)
ElasticSearch 安裝, 帶視頻 ElasticSearch 安裝, 帶視頻
Nacos 安裝(帶視頻) Nacos 安裝(帶視頻)
【必須】Eureka Eureka 入門,帶視頻
【必須】springcloud Config 入門,帶視頻 springcloud Config 入門,帶視頻
【必須】Zuul 詳解,帶視頻 Zuul 詳解,帶視頻
【必須】SpringCloud 腳手架打包與啓動 SpringCloud腳手架打包與啓動

Zuul 微服務統一網關的功能

Zuul的角色是網關,也就是整個分佈式微服務集羣的流量入口。Zuul負責接收全部的Rest請求,如網頁端、APP端等。
Zuul的功能有:
(1)路由:而且將不一樣的 Rest 請求,轉發至不一樣的微服務提供者(Provider),其做用相似於 Nginx。 同時,也起到了統一端口的做用,將不少的微服務提供者(Provider)的不一樣的端口,統一到了 Zuul 的服務端口。
(2)認證:網關直接暴露在公網上時,終端要調用某個服務,一般會把登陸後的token傳過來,網關層對token令牌進行有效性驗證,若是token令牌無效(或沒令牌),則不容許訪問Rest 服務。能夠結合 Spring Security中的認證機制,完成 Zuul 網關的安全認證。。
(3)限流:高併發場景下,瞬時流量不可預估,爲了保證服務對外的穩定性,限流成爲每一個應用必備的一道安全防火牆,若是沒有這道安全防火牆,請求的流量超過服務的負載能力,很容易形成整個服務的癱瘓。Zuul 使用 ZuulFilter 過濾器集成 RateLimiter 限流組件,能夠基於Redis實現了分佈式限流的功能。spring

在這裏插入圖片描述

開啓Zuul網關服務

Zuul 作爲網關層,自身也是一個微服務,跟其它服務提供者同樣,都註冊在Eureka Server上,能夠相互發現,Zuul能感知到哪些服務提供在線,同時經過配置路由規則,能夠將Rest請求自動轉發到指定的後端微服務上。
新建 Zuul 網關服務項目的時候,須要在啓動類中添加註解@EnableZuulProxy ,聲明這是一個網關服務提供者。固然也須要在pom.xml文件中手動添加上以下依賴。編程

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>

啓動類的代碼以下:windows

package com.crazymaker.springcloud.cloud.center.zuul;
//...

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
@SpringBootApplication(scanBasePackages =
        {"com.crazymaker.springcloud.cloud.center.zuul",
                "com.crazymaker.springcloud.standard",
                "com.crazymaker.springcloud.user.info.contract"
        })
@EnableScheduling
@EnableHystrix
@EnableDiscoveryClient
//開啓網關服務
@EnableZuulProxy
@EnableCircuitBreaker
public class ZuulServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulServerApplication.class, args);
    }
}

配置Zuul網關路由規則

如下是 Crazy-SpringCloud 微服務腳手架中的 Zuul 網關的路由規則配置:後端

#服務網關配置
zuul:
  ribbonIsolationStrategy: THREAD
  host:
    connect-timeout-millis: 600000
    socket-timeout-millis: 600000
  #路由規則
  routes:
    seckill-provider:
      path: /seckill-provider/**
      serviceId: seckill-provider
    message-provider:
      path: /message-provider/**
      serviceId: message-provider
    user-provider:
      path: /user-provider/**
      serviceId: user-provider
    urlDemo:
      path: /demo-provider/**
      url: http://127.0.0.1/demo-provider

以上示例中,使用了兩種路由的方式:(1) 路由到直接URL;(2) 路由到微服務提供者。
先看第一種方式:路由到直接URL
好比在上述代碼中,有一條叫作 urlDemo 的路由規則,該規則將匹配 /demo-provider/** 的全部URL請求,直接路由到 http://127.0.0.1/demo-provider/** 的直接地址。
再看第二種方式:路由到微服務提供者
好比在上述代碼中,有一條叫作 user-provider 的路由規則,該規則將匹配 /user-provider /** 的全部URL請求,直接路由到名字叫作 user-provider 的某個微服務提供者。
兩種方式的區別
(1)第二種方式,使用 serviceId 來指定服務提供者的名稱;而第一種方式,使用url 來指定直接的目的 url 前綴。
(2)第二種方式,須要結合 Eureka Client 來實現動態的路由轉發功能。啓動類須要加上註解 @EnableDiscoveryClient。其實能夠不加,由於 @EnableZuulProxy 已經自帶了。另外,配置文件中增長 Eureka Client 客戶端的相關配置,大體以下:安全

eureka:
  client:
    serviceUrl:
      defaultZone: http://${EUREKA_ZONE_HOST:localhost}:7777/eureka/
  instance:
    prefer-ip-address: true  #訪問路徑能夠顯示IP地址
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
    ip-address: ${spring.cloud.client.ip-address}

部署和視頻

首先須要本地測試經過。服務器

(1)打包:

maven 打包工具。

(2)部署:

部署到linux服務器,解壓縮,而後 start.sh 腳本啓動。

(3) 訪問

http://192.168.233.128:7799/

(4) 視頻示意(具體視頻,請參見 博客園總入口

img

具體,請關注 Java 高併發研習社羣博客園 總入口


最後,介紹一下瘋狂創客圈:瘋狂創客圈,一個Java 高併發研習社羣博客園 總入口

瘋狂創客圈,傾力推出:面試必備 + 面試必備 + 面試必備 的基礎原理+實戰 書籍 《Netty Zookeeper Redis 高併發實戰

img


瘋狂創客圈 Java 死磕系列

  • Java (Netty) 聊天程序【 億級流量】實戰 開源項目實戰
相關文章
相關標籤/搜索