一. 概述
1. 什么是zuul?
- Zull包含了对请求的路由(用来跳转的)和过滤两个最主要功能:
- 其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。
- 注意:Zuul服务最终还是会注册进Eureka
- 提供:代理+路由+过滤 三大功能!
2. Zuul能干嘛?
- 路由
- 过滤
二. 案例
1. 代码
-
导入依赖
<dependencies> <!--zuul--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zuul</artifactId> <version>1.4.7.RELEASE</version> </dependency> <!--hystrix--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.4.7.RELEASE</version> </dependency> <!-- hystrix-dashboard --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> <version>1.4.7.RELEASE</version> </dependency> <!--Ribbon--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-ribbon --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>1.4.7.RELEASE</version> </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.7.RELEASE</version> </dependency> <dependency> <groupId>org.example</groupId> <artifactId>springboot-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--热部署根据--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> </dependencies>
-
application.yml配置文件
server: port: 9527 spring: application: # 配置服务名 name: springcloud-zuul eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: # 修改eureka上默认描述信息 instance-id: zuul--9527 # 是否显示ip地址, 而不是显示域名. 默认是false, 显示域名 prefer-ip-address: true info: app.name: hjf-springcloud company.name: www.jiangfengtime.com
-
启动类
@SpringBootApplication @EnableZuulProxy // 开启Zuul代理 public class ZuulApplication_9527 { public static void main(String[] args) { SpringApplication.run(ZuulApplication_9527.class, args); } }
2. 运行结果
-
启动Eureka, 服务端以及Zuul
-
服务端正常访问
-
通过Zuul访问
3. 此时链接中仍然包含服务名, 所以还需要修改配置
-
application.yml中添加zuul配置
zuul: routes: # 原始服务名 mydept.serviceId: springcloud-provider-dept # 重定向名 mydept.path: /mydept/** # 忽略通过原始服务名访问, # 如果不加该配置, 通过原始服务名和重定向名都可以访问 # ignored-services: springcloud-provider-dept # 忽略全部的真实访问路径, 这样就只能通过重定向访问 ignored-services: "*" # 添加公共前缀, /hjf/mydept/** prefix: /hjf
-
通过重定向访问