练习代码gitee地址: https://gitee.com/longjiamou/spring-cloud-netflix.git
1. 什么是Zuul
Zuul是SpringCloud Netflix里的一个组件之一,也称为路由网关,它本身也是一个微服务,可以在注册中心里注册,主要负责将用户的请求经过处理再转发到每一个具体的业务服务中,从而提高服务系统的安全性,同时它也继承了Ribbon,Hystrix等SpringCloud组件。
2. Zuul的作用
Zuul本身可以理解为一个过滤器,底层是servlet,它还包含了一些常用的过滤器,如:PRE(路由请求开始时过滤),Routing(路由到达微服务时过滤),Post(路由到微服务后被过滤)和Error(路由发生错误时被过滤)等等,同时它也可以自定义过滤器等等,是微服务系统中比较常用的一个路由过滤器了。
Zuul的主要作用分为:统一路由,鉴权校验,动态路由和降低耦合等等。
统一路由: 为所有的服务提供一个唯一的入口,网关起到外部和内部隔离的作用,保障了后台服务的安全性。
鉴权校验: 识别每个请求的权限,拒绝不符合要求的请求,常见的为:限制原先的路由,只能用统一的路由。
动态路由: 动态的将请求路由到不同的后端集群中。
降低耦合: 服务可以独立发展,通过网关层来做映射
3. 简单入门
1.搭建相关的服务:
2.导入相关依赖和配置信息
pom依赖: 导入Zuul组件依赖
<!-- Zuul路由网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
application配置文件:
server:
port: 8087
eureka:
client:
service-url:
defaultZone: http://localhost:8081/eureka/,http://localhost:8082/eureka/
register-with-eureka: true
fetch-registry: true
instance:
instance-id: zuul-8087
spring:
application:
name: zuul-8087
zuul:
routes:
server-provider: /my/**
#ignored-services: "*" ##禁止使用原先路径访问
#prefix: /abc ##设置统一的请求头
ribbon:
ReadTimeout: 3000
ConnectTimeout: 3000
eureka:
enabled: true
启动类添加注解:
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableZuulProxy
public class Zuul8087Application {
public static void main(String[] args) {
SpringApplication.run(Zuul8087Application.class, args);
}
}
3.启动测试: server-provide-8083和zuul-8087