瘋狂創客圈 經典圖書 : 《Netty Zookeeper Redis 高併發實戰》 面試必備 + 面試必備 + 面試必備 【博客園總入口 】html
瘋狂創客圈 經典圖書 : 《SpringCloud、Nginx高併發核心編程》 大廠必備 + 大廠必備 + 大廠必備 【博客園總入口 】java
入大廠+漲工資必備: 高併發【 億級流量IM實戰】 實戰系列 【 SpringCloud Nginx秒殺】 實戰系列 【博客園總入口 】linux
《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負責接收全部的Rest請求,如網頁端、APP端等。
Zuul的功能有:
(1)路由:而且將不一樣的 Rest 請求,轉發至不一樣的微服務提供者(Provider),其做用相似於 Nginx。 同時,也起到了統一端口的做用,將不少的微服務提供者(Provider)的不一樣的端口,統一到了 Zuul 的服務端口。
(2)認證:網關直接暴露在公網上時,終端要調用某個服務,一般會把登陸後的token傳過來,網關層對token令牌進行有效性驗證,若是token令牌無效(或沒令牌),則不容許訪問Rest 服務。能夠結合 Spring Security中的認證機制,完成 Zuul 網關的安全認證。。
(3)限流:高併發場景下,瞬時流量不可預估,爲了保證服務對外的穩定性,限流成爲每一個應用必備的一道安全防火牆,若是沒有這道安全防火牆,請求的流量超過服務的負載能力,很容易形成整個服務的癱瘓。Zuul 使用 ZuulFilter 過濾器集成 RateLimiter 限流組件,能夠基於Redis實現了分佈式限流的功能。spring
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); } }
如下是 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 高併發實戰》
Netty 源碼、原理、JAVA NIO 原理
Java 面試題 一網打盡
瘋狂創客圈 【 博客園 總入口 】