Zuul 詳解,帶視頻


瘋狂創客圈 Java 高並發【 億級流量聊天室實戰】實戰系列 【博客園總入口

架構師成長+面試必備之 高並發基礎書籍 【Netty Zookeeper Redis 高並發實戰


前言

Crazy-SpringCloud 微服務腳手架 &視頻介紹

Crazy-SpringCloud 微服務腳手架,是為 Java 微服務開發 入門者 准備的 學習和開發腳手架。並配有一系列的使用教程和視頻,大致如下:

高並發 環境搭建 圖文教程和演示視頻,陸續上線:

中間件 鏈接地址
Linux Redis 安裝(帶視頻) Linux Redis 安裝(帶視頻)
Linux Zookeeper 安裝(帶視頻) Linux Zookeeper 安裝, 帶視頻
Windows Redis 安裝(帶視頻) Windows Redis 安裝(帶視頻)
RabbitMQ 離線安裝(帶視頻) RabbitMQ 離線安裝(帶視頻)
ElasticSearch 安裝, 帶視頻 ElasticSearch 安裝, 帶視頻
Nacos 安裝(帶視頻) Nacos 安裝(帶視頻)

Crazy-SpringCloud 微服務腳手架 圖文教程和演示視頻,陸續上線:

組件 鏈接地址
Eureka Eureka 入門,帶視頻
SpringCloud Config springcloud Config 入門,帶視頻
spring security spring security 原理+實戰
Spring Session SpringSession 獨立使用
分布式 session 基礎 RedisSession (自定義)
重點: springcloud 開發腳手架 springcloud 開發腳手架
SpingSecurity + SpringSession 死磕 (寫作中) SpingSecurity + SpringSession 死磕

小視頻以及所需工具的百度網盤鏈接,請參見 瘋狂創客圈 高並發社群 博客

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實現了分布式限流的功能。

在這里插入圖片描述

開啟Zuul網關服務

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

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

啟動類的代碼如下:

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) 聊天程序【 億級流量】實戰 開源項目實戰


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM