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) 访问
(4) 视频示意(具体视频,请参见 博客园总入口 )

具体,请关注 Java 高并发研习社群 【博客园 总入口 】
最后,介绍一下疯狂创客圈:疯狂创客圈,一个Java 高并发研习社群 【博客园 总入口 】
疯狂创客圈,倾力推出:面试必备 + 面试必备 + 面试必备 的基础原理+实战 书籍 《Netty Zookeeper Redis 高并发实战》
疯狂创客圈 Java 死磕系列
- Java (Netty) 聊天程序【 亿级流量】实战 开源项目实战
Netty 源码、原理、JAVA NIO 原理
Java 面试题 一网打尽
疯狂创客圈 【 博客园 总入口 】
Zuul 详解,带视频的更多相关文章
- Python开发技术详解(视频+源码+文档)
Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...
- zuul 详解
zuul的简单使用与分析: https://www.jb51.net/article/106716.htm https://www.jianshu.com/p/ff863d532767 zuul自定义 ...
- Apache的配置详解 带图
对Apache 的 Http.conf 各项配置详解 1.01 ServerRoot 配置 [ServerRoot "" 主要用于指定 Apache 的安装路径,此选项参数值在安装 ...
- [转] 关于Struts-JSON配置(详解带实例struts2的json数据支持)
关于Struts-JSON的提高开发效率 一.JSON是什么? :JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写,同时也易于机器解 析和 ...
- linux初级学习笔记八:linux权限管理及权限管理命令详解!(视频序号:04_2)
本节学习的命令:chown,chgrp,chmod,openssl,umask 本节学习的技能: 文件权限详解及对其的操作 生成随机密码命令 用遮罩码对用户权限进行修改 站在用户登陆的角度来说SHEL ...
- linux初级学习笔记六:linux用户及权限详解!(视频序号:03_4)
本节学习的命令:/etc/passwd,/etc/shadow,/etc/group文件详解 本节学习的技能: 安全上下文 文件与目录的权限管理 影子命令 用户,用户组类别详解 /etc/passwd ...
- 详解H264视频格式-2016.01.28
专业名词解释 VCL(Video Coding Layer)视频编码层 NAL(Network Abstraction Layer)网络提取层 SPS(Sequence Parameter Set) ...
- Android 中使用MediaRecorder进行录像详解(视频录制)
在这里给出自己的一个测试DEMO,里面注释很详细.简单的视频录制功能. package com.video; import java.io.IOException; import android.ap ...
- C#调用存储过程详解(带返回值、参数输入输出等)
CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGI ...
随机推荐
- 【Android - 自定义View】之View的measure过程解析
measure(测量)过程是View的工作流程中最开始.最核心的过程,在这个过程中负责确定View的测量宽/高. 对于View和ViewGroup,measure过程有不同的执行方法:如果目标是一个原 ...
- Nginx防盗链、访问控制、解析PHP相关配置及Nginx代理
6月11日任务 12.13 Nginx防盗链12.14 Nginx访问控制12.15 Nginx解析php相关配置12.16 Nginx代理 扩展502问题汇总 http://ask.apelearn ...
- oc工程中oc、swift混编代码打包成静态framework踩坑笔记
参考资料: https://www.jianshu.com/p/734341f7c242 https://www.jianshu.com/p/55038871e7de 两天时间探索,期间不知道遇到 ...
- ssm三大框架整合基本配置
ssm三大框架整合基本配置 maven目录结构 数据库脚本mysql create database maven; use maven ; -- --------------------------- ...
- Python列表中的字典按照该字典下的键值进行排序
列表中的字典按照该字典下的键值进行排序 这算是排序中比较复杂的一种情况吧,多重嵌套,按照某种规则进行排序.如下面这个json(注:这里这是该列表中的一个项): [ { "stat" ...
- 一道时间复杂度为O(N)空间复杂度为O(1)的排序问题
题目:对1, 2, ... , n的一个无序数组,排序,要求时间复杂度为O(N),空间复杂度为O(1). 思路:该题利用数组元素和数组下标相差1的关系,Java代码如下: import java.ut ...
- matplotlib画图总结--常用功能
0.内容范围 多曲线图.图例.坐标轴.注释文字等. 1.曲线图 多曲线图.图例.网格.坐标轴名称.图标名.坐标轴范围等. from matplotlib import pyplot as plt im ...
- 洛谷 题解 P3161 【[CQOI2012]模拟工厂】
本蒟蒻又双叒叕被爆踩辣! 题目链接 Solution: 这题又是一道贪心.. 数据范围: n<=15 ti<=100,000 gi<=10^9 mi<=10^9 这里就可以看到 ...
- 洛谷 题解 P2645 【斯诺克】
吐槽一下这道题: 数据太水了!!! 请注意,这题如果你考虑了犯规的情况,那么你的分数...可能会和我一样,只有40分. 也就是说,这是一篇AC不了这道题的题解!!! 现在,我来讲一下这道题的正解: 两 ...
- Redis中的Java分布式缓存
为什么在分布式Java应用程序中使用缓存?今天学习了两节优锐课讲解分布式缓存的内容,收获颇多,分享给大家. 在提高应用程序的速度和性能时,每毫秒都是至关重要的.例如,根据Google的一项研究,如果网 ...