SpringCloud_06 Zuul路由网关
Zuul概述
- Zuul包含了对请求的路由和过滤两个最主要的功能。
- 其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础。
- 而过滤器功能则是负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。
- Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也就是以后的访问微服务都是通过Zuul跳转后获得。
- 总结,Zuul提供 代理+路由+过滤 三大功能!
SpringCloud实现Zuul
- 新建模块spring-cloud-zuul,导入相关依赖。
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.jiu</groupId>
<artifactId>spring-cloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- eureka-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
</dependencies>
- 编写主启动类,开启zuul。
package com.jiu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication
@EnableZuulProxy //开启zuul
public class SpringCloudZuul9527 {
public static void main(String[] args) {
SpringApplication.run(SpringCloudZuul9527.class,args);
}
}
- 编写配置文件application.yml。
- 基本配置 (Eureka、端口号、程序名):
server:
port: 9527
spring:
application:
name: SPRING-CLOUD-ZUUL-GATEWAY
eureka:
client:
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
instance:
instance-id: spring-cloud-zuul-gateway-9527
prefer-ip-address: true #显示真实ip
info:
app.name: jiu-spring-cloud
company.name: jiu-jiu-company
- 启动项目7001,8001,9527,现在访问服务有两种方式。
- 方式一:访问http://localhost:8001/dept/queryAllDept
- 方式二:访问http://www.jiu.com:9527/spring-cloud-provider-dept/dept/queryAllDept。需要自行配置域名映射规则(127.0.0.1 www.jiu.com)。即通过实例名称+具体服务路径访问。
- 现在的目的是要把spring-cloud-provider-dept实例名称隐藏掉,在application.yml下添加如下zuul配置。
zuul:
routes:
mydept.serviceID: spring-cloud-provider-dept
mydept.path: /mydept/**
- 重启项目,此时原路径依旧能访问。
- 现在通过http://www.jiu.com:9527/mydept/dept/queryAllDept访问,结果一致:
- 但在实际开发过程中原路径,即使用实例名称访问的方式一般不会存在。
- 继续添加zuul配置:
zuul:
routes:
mydept.serviceID: spring-cloud-provider-dept
mydept.path: /mydept/**
ignored-services: "*" #不能再使用这个路径访问了。* : 隐藏全部。
-
重启访问。
-
此时无法使用实例名称进行访问了,只能通过自定义的路径进行访问:
-
除此之外还能配置访问的前缀:
zuul:
routes:
mydept.serviceID: spring-cloud-provider-dept
mydept.path: /mydept/**
ignored-services: "*" #不能再使用这个路径访问了。* : 隐藏全部。
prefix: /jiu #公共访问前缀。
- 配置完成后再度重启项目,此时访问都需要加上前缀。