疯狂创客圈 经典图书 : 《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 面试题 一网打尽
疯狂创客圈 【 博客园 总入口 】