Spring Cloud 应用篇 之 Spring Cloud Zuul(一)路由功能

微服务架构中,是很多微小的服务组成,那么调用这些服务接口,如果直接调用每个服务提供的接口,是不现实的,这个时候我们就需要一个请求的统一入口,也就是服务网关,而 Spring Cloud 已为我们提供了 Zuul。

(一)简介

Zuul 的特点是路由+过滤器,核心是一系列的过滤器,Zuul 定义了四种过滤器

  • 前置(Pre)
  • 路由(Route)
  • 后置(Post)
  • 错误(Error)

Zuul 默认集成 Ribbon 实现了负载均衡的功能。

(二)创建 spring-cloud-gateway 模块

2.1 添加依赖,pom 文件:

  
  
  1. <?xml version=“1.0” encoding=“UTF-8”?>
  2. <project xmlns=“http://maven.apache.org/POM/4.0.0”
  3. xmlns:xsi= “http://www.w3.org/2001/XMLSchema-instance”
  4. xsi:schemaLocation= “http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
  5. <parent>
  6. <artifactId>spring-cloud-componets </artifactId>
  7. <groupId>com.geny </groupId>
  8. <version>1.0-SNAPSHOT </version>
  9. </parent>
  10. <modelVersion>4.0.0 </modelVersion>
  11. <artifactId>spring-cloud-gateway </artifactId>
  12. <dependencies>
  13. <dependency>
  14. <groupId>org.springframework.cloud </groupId>
  15. <artifactId>spring-cloud-config-client </artifactId>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.cloud </groupId>
  19. <artifactId>spring-cloud-starter-netflix-eureka-client </artifactId>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.springframework.cloud </groupId>
  23. <artifactId>spring-cloud-starter-netflix-zuul </artifactId>
  24. </dependency>
  25. </dependencies>
  26. <build>
  27. <plugins>
  28. <plugin>
  29. <groupId>org.springframework.boot </groupId>
  30. <artifactId>spring-boot-maven-plugin </artifactId>
  31. </plugin>
  32. </plugins>
  33. </build>
  34. </project>

2.2 配置文件 bootstrap.yaml 如下:

  
  
  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: spring-cloud-gateway
  6. eureka:
  7. client:
  8. service-url:
  9. defaultZone: http: //localhost:8761/eureka
  10. management:
  11. endpoints:
  12. web:
  13. exposure:
  14. include: '*'
2.3 启动类

  
  
  1. @SpringBootApplication
  2. @EnableZuulProxy
  3. public class GatewayApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(GatewayApplication.class, args);
  6. }
  7. }

在启动类上添加 @EnableZuulProxy 注解,开启 Zuul 的功能

2.4 启动相关服务

依次启动 eureka-server、spring-cloud-config、spring-demo-service、spring-cloud-gateway,访问 localhost:8761


可以看到,服务都已经注册到 eureka 中了

2.5 实现路由功能

在 spring-cloud-gateway 启动中,查看启动日志,截图如下


可以看到,/actuator/routes 这个被暴露的接口,我们访问 http://localhost:9001/actuator/routes


这个接口是可以查看所有的路由规则,按照上面这个路由的规则,我们访问一下 http://localhost:9001/spring-demo-service/port,结果如下


这说明路由功能已经起作用了,但是这个是按照 Zuul 的默认规则路由,不灵活,我们可以实现自定义的路由规则。

(三)自定义路由

自定义路由规则很简单,只需要在配置文件里进行一些配置即可,如下对 spring-demo-service 服务进行自定义路由规则:


  
  
  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: spring-cloud-gateway
  6. eureka:
  7. client:
  8. service-url:
  9. defaultZone: http: //localhost:8761/eureka
  10. management:
  11. endpoints:
  12. web:
  13. exposure:
  14. include: '*'
  15. <span style= "color:#ff0000;">zuul:
  16. routes:
  17. demoService:
  18. path: /demoService/**
  19. serviceId: spring-demo-service< /span>

加了红色部分,即可自定义路由规则,以 /demoService/ 开头的请求都转发给 spring-demo-service 服务,重新启动 spring-cloud-gateway 服务,访问 http://localhost:9001/demoService/port


由此可见,我们自定义的路由规则也已生效,再次访问 http://localhost:9001/actuator/routes,可以看到,我们自定义的路由规则已在其中。


(四)隐藏接口功能

Zuul 可以路由接口服务,也可以让服务接口不暴露给外界调用,同样只需在配置文件里进行相应的配置即可。


  
  
  1. server:
  2. port: 9001
  3. spring:
  4. application:
  5. name: spring-cloud-gateway
  6. eureka:
  7. client:
  8. service- url:
  9. defaultZone: http:/ /localhost:8761/eureka
  10. management:
  11. endpoints:
  12. web:
  13. exposure:
  14. include: '*'
  15. zuul:
  16. routes:
  17. # demoService:
  18. # path: /demoService/**
  19. # serviceId: spring-demo-service
  20. #简洁写法
  21. spring-demo- service: /demoService/**
  22. <span style= "color:#ff0000;"> ignored- patterns:
  23. - /spring-demo-service/port< /span>

只需要配置上面红色部分,就可以让 /spring-demo-service/port 这个接口不能被外界访问,重启 spring-cloud-gateway,访问 http://localhost:9001/spring-demo-service/port,结果如下


返回状态 404,可见配置已经生效,但是这个时候,我们自定义的 /demoService/** 还能继续访问,访问 http://localhost:9001/demoService/port,结果如下


所以要想这个接口服务不能被调用,还要加上 /demoService/port


  
  
  1. zuul:
  2. routes:
  3. # demoService:
  4. # path: /demoService/**
  5. # serviceId: spring-demo-service
  6. #简洁写法
  7. spring-demo- service: /demoService/**
  8. ignored- patterns:
  9. - /spring-demo-service/port
  10. - /demoService/port

再次访问 http://localhost:9001/demoService/port,结果如下


此时也返回 404,配置已生效。

Zuul 除了路由功能,还有过滤器功能,过滤功能在下一篇讲解。


源码下载:https://github.com/shmilyah/spring-cloud-componets

转载自:https://blog.csdn.net/hubo_88/article/details/80849276
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值