1 Zuul网关简介
1)Zuul 是什么
Zuul包含了对请求的路由和过滤两个最主要的功能:
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.
Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
注意:Zuul服务最终还是会注册进Eureka,提供=代理+路由+过滤三大功能
2)Zuul能干嘛
路由=---------] `zxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxazx55555
过滤
官网资料 https://github.com/Netflix/zuul/wiki/Getting-Started
2 Zuul网关 Demo
一、路由基本配置
1)新建子Module模块microservicecloud-zuul-gateway-9527
2)pom.xml
<dependencies>
<!-- zuul路由网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- actuator监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- hystrix容错-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- 日常标配 -->
<dependency><!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->
<groupId>com.tang</groupId>
<artifactId>micro-service-cloud-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- 热部署插件 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
3)配置文件
server.port=9527
spring.application.name=microservicecloud-zuul-gateway
eureka.client.service-url.defaultZone=http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
eureka.instance.instance-id=gateway-9527.com
eureka.instance.prefer-ip-address=true
info.app.name=atguigu-microcloud
info.company.name=www.atguigu.com
info.build.artifactId=$project.artifactId$
info.build.version=$project.version$
4)hosts修改
127.0.0.1 myzuul.com
5)主启动类 添加@EnableZuulProxy注解
@SpringBootApplication
@EnableZuulProxy
public class Zuul_9527_StartSpringCloudApp
{
public static void main(String[] args)
{
SpringApplication.run(Zuul_9527_StartSpringCloudApp.class, args);
}
}
6)启动
三个eureka集群
一个服务提供类microservicecloud-provider-dept-8001
一个路由
7)测试
不用路由 http://localhost:8001/dept/get/2
使用路由http://myzuul.com:9527/microservicecloud-dept/dept/get/2
(网关/服务名/服务路径)
2种方式都可以访问
二、路由访问映射规则
工程microservicecloud-zuul-gateway-9527
1)配置代理路由名称
zuul.routes.mydept.serviceId=microservicecloud-dept
zuul.routes.mydept.path=/mydept/**
不用路由http://localhost:8001/dept/get/2
使用代理名称路由http://myzuul.com:9527/mydept/dept/get/2
使用路由http://myzuul.com:9527/microservicecloud-dept/dept/get/2
3种方式都可以访问
2)原真实服务名忽略(避免服务名的暴露)
单个具体,多个可以用"*"
zuul.routes.mydept.serviceId=microservicecloud-dept
zuul.routes.mydept.path=/mydept/**
zuul.ignored-services=microservicecloud-dept
#zuul.ignored-services=* 忽略多个
http://myzuul.com:9527/microservicecloud-dept/dept/get/2访问失效
3)设置统一公共前缀
http://myzuul.com:9527/tang/mydept/dept/get/2
zuul.prefix=/tang
zuul.routes.mydept.serviceId=microservicecloud-dept
zuul.routes.mydept.path=/mydept/**
zuul.ignored-services=*
4)最终的配置
server.port=9527
spring.application.name=microservicecloud-zuul-gateway
eureka.client.service-url.defaultZone=http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka
eureka.instance.instance-id=gateway-9527.com
eureka.instance.prefer-ip-address=true
info.app.name=tang-microcloud
info.company.name=www.tang.com
info.build.artifactId=$project.artifactId$
info.build.version=$project.version$
zuul.prefix=/tang
zuul.routes.mydept.serviceId=microservicecloud-dept
zuul.routes.mydept.path=/mydept/**
zuul.ignored-services=*