瘋狂創客圈 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) 訪問
(4) 視頻示意(具體視頻,請參見 博客園總入口 )
具體,請關注 Java 高並發研習社群 【博客園 總入口 】
最后,介紹一下瘋狂創客圈:瘋狂創客圈,一個Java 高並發研習社群 【博客園 總入口 】
瘋狂創客圈,傾力推出:面試必備 + 面試必備 + 面試必備 的基礎原理+實戰 書籍 《Netty Zookeeper Redis 高並發實戰》
瘋狂創客圈 Java 死磕系列
- Java (Netty) 聊天程序【 億級流量】實戰 開源項目實戰
-
Netty 源碼、原理、JAVA NIO 原理
-
Java 面試題 一網打盡
-
瘋狂創客圈 【 博客園 總入口 】