经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
【分布式】SpringCloud(7)--Zuul路由网关
来源:cnblogs  作者:人无名,则可专心练剑  时间:2021/4/6 10:20:26  对本文有异议

1.Zuul概述

1.1.什么是Zuul

 

由于有如此众多的客户端和服务器,在您的云体系结构中包括一个API网关通常会很有帮助。网关可以负责保护和路由消息,隐藏服务,限制负载以及许多其他有用的事情。Spring Cloud Gateway 使您可以精确控制API层,集成Spring Cloud服务发现和客户端负载平衡解决方案以简化配置和维护。

 

Zuul包含了对请求的路由过滤两个最主要的功能:

其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验服务聚合等功能的基础。Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其它微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

 

注意:Zuul服务最终还是会注册进Eureka

 

1.2.Zuul的作用

Zuul有三大功能:

  • 代理
  • 路由
  • 过滤

其中路由过滤是Zuul的主要功能。

 

2.Zuul的基本配置

项目工程基于原项目: springcloud_hello ,可以查看我之前的博客。这里基于zuul新创建一个springcloud-zuul-gateway-9527的Module模块。

 

2.1.导入pom.xml依赖

导入相关pom依赖包:

  1. <!--zuul组件、zuul需要注册至eureka中-->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-zuul</artifactId>
  5. <version>1.4.6.RELEASE</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.springframework.cloud</groupId>
  9. <artifactId>spring-cloud-starter-eureka</artifactId>
  10. <version>1.4.6.RELEASE</version>
  11. </dependency>
  12.  
  13. <!--actuator:完善监控信息-->
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-actuator</artifactId>
  17. </dependency>
  18. <!--引入hystrix-->
  19. <dependency>
  20. <groupId>org.springframework.cloud</groupId>
  21. <artifactId>spring-cloud-starter-hystrix</artifactId>
  22. <version>1.4.6.RELEASE</version>
  23. </dependency>
  24. <!--需要拿到实体类,引入api module-->
  25. <dependency>
  26. <groupId>com.fengye</groupId>
  27. <artifactId>springcloud-api</artifactId>
  28. <version>1.0-SNAPSHOT</version>
  29. </dependency>
  30. <dependency>
  31. <groupId>junit</groupId>
  32. <artifactId>junit</artifactId>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-test</artifactId>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework.boot</groupId>
  40. <artifactId>spring-boot-starter-web</artifactId>
  41. </dependency>
  42. <!--jetty服务器-->
  43. <dependency>
  44. <groupId>org.springframework.boot</groupId>
  45. <artifactId>spring-boot-starter-jetty</artifactId>
  46. </dependency>
  47. <!--热部署工具-->
  48. <dependency>
  49. <groupId>org.springframework.boot</groupId>
  50. <artifactId>spring-boot-devtools</artifactId>
  51. </dependency>

 

2.2.配置application.yml

  1. server:
  2. port: 9527 #端口信息
  3. #spring的配置
  4. spring:
  5. application:
  6. name: springcloud-zuul-gateway #注册进eureka中的实例名称(显示大写)
  7. #eureka的配置,确定客户端服务注册到eureka服务列表内
  8. eureka:
  9. client:
  10. service-url:
  11. #集群配置
  12. defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
  13. instance:
  14. instance-id: gateway-9527.com #修改eureka上默认的服务描述信息
  15. prefer-ip-address: true #访问路径可以显示ip地址
  16. #info配置
  17. info:
  18. app.name: fengye-springcloud
  19. company.name: blog.fengye.com
  20. build.artifactId: $project.artifactId$
  21. build.version: $project.version$

 

这里在本机单机电脑上测试,增加了hosts文件配置:

 

2.3.编写启动项

新建启动项配置,增加@EnableZuulProxy注解,表示网关代理:

  1. @SpringBootApplication
  2. @EnableZuulProxy //增加zuul网关代理支持
  3. public class Zuul_9527_StartSpringCloudApp {
  4. public static void main(String[] args) {
  5. SpringApplication.run(Zuul_9527_StartSpringCloudApp.class, args);
  6. }
  7. }

 

2.4.启动测试

需要启动三个Eureka注册中心集群、一个服务提供者dept-8001、一个zuul 9527路由网关:

 

启动后访问:http://eureka7001.com:7001/,可以看到zuul网关服务已经注册进了Eureka注册中心。

 

路由访问测试,访问服务提供者的接口地址:

①使用原来的Restful风格进行访问:http://localhost:8001/dept/queryById/1   

 

②使用API网关路由地址进行访问:http://myzuul.com:9527/springcloud-provider-dept/dept/queryById/1

 

其中myzuul.com:9527为域名映射后的访问地址+port端口号,springcloud-provider-dept为服务名称(使用小写),/dept/queryById/1是Restful风格的地址。

这样就是用zuul对服务的请求访问进行了最基本的配置,达到了可以使用Zuul进行访问地址的配置。

 

3.Zuul访问映射规则配置

基于上面的操作我们实现了zuul的基本配置,但是在实际开发中我们不想对外暴露出我们微服务的具体名称,可能会自定义做一些安全访问的策略。

那么就可以进行一些访问规则的配置。zuul可以基于application.xml中一些自定义的简单配置实现路由映射url地址自定义访问。

 

3.1.zuul替换服务名配置

application.yml配置:

  1. #避免真实服务名暴露,可以自定义修改,key-value形式,key:原真实服务名,value:自定义映射地址
  2. zuul:
  3. routes:
  4. mydept.serviceId: springcloud-provider-dept #不暴露原来的服务名,将springcloud-provider-dept作为key替换
  5. mydept.path: /mydept/** #现在的服务路径修改为/mydept/**

before:http://myzuul.com:9527/springcloud-provider-dept/dept/queryById/1

after:http://myzuul.com:9527/mydept/dept/queryById/1

但是这样after路径与before路径都能访问:

 

 

 

3.2.Zuul忽略原服务名配置

如果我们要去除原来的地址,只保留我们想要映射的地址(单一入口)访问,那么需要添加如下配置:

  1. #避免真实服务名暴露,可以自定义修改,key-value形式,key:原真实服务名,value:自定义映射地址
  2. zuul:
  3. ignored-services: springcloud-provider-dept #原来的springcloud-provider-dept无效,使用新的
  4. routes:
  5. mydept.serviceId: springcloud-provider-dept #不暴露原来的服务名,将springcloud-provider-dept作为key替换
  6. mydept.path: /mydept/** #现在的服务路径修改为/mydept/**

 

可以看到真实的路径已经被忽略:

 

 

 

实际开发中如果涉及多个微服务需要忽略配置:

  1. ignored-services: "*" #多个微服务统一忽略原微服务名,使用现在给的value值

 

3.3.Zuul统一域名前缀配置

表示所有的请求访问都要加上前缀/fengye才能访问:

  1. #避免真实服务名暴露,可以自定义修改,key-value形式,key:原真实服务名,value:自定义映射地址
  2. zuul:
  3. prefix: /fengye #统一路径名前缀
  4. ignored-services: springcloud-provider-dept #原来的springcloud-provider-dept无效,使用新的
  5. routes:
  6. mydept.serviceId: springcloud-provider-dept #不暴露原来的服务名,将springcloud-provider-dept作为key替换
  7. mydept.path: /mydept/** #现在的服务路径修改为/mydept/**

 

 3.4.Zuul配置总结:

  1. #避免真实服务名暴露,可以自定义修改,key-value形式,key:原真实服务名,value:自定义映射地址
  2. zuul:
  3. prefix: /fengye #统一路径名前缀
  4. ignored-services: springcloud-provider-dept #原来的springcloud-provider-dept无效,使用新的;使用"*"表示多个微服务统一忽略原微服务名,使用现在给的value值
  5. routes:
  6. mydept.serviceId: springcloud-provider-dept #不暴露原来的服务名,将springcloud-provider-dept作为key替换
  7. mydept.path: /mydept/** #现在的服务路径修改为/mydept/**

 

Zuul是SpringCloud Netflix  Greenwich版本中Gateway的一种实现方式,目前随着SpringCloud Alibaba的出现,Zuul网关实现已经随SpringCloud切换到了Hoxton版本。

更多Zuul特性如拦截器请参阅以下博文及官方文档:

SpringCloud系列(九) 使用Zuul实现服务网关

Zuul官方文档

 

本博客涉及示例代码均已上传至Github地址:

https://github.com/devyf/SpringCloud_Study

 

原文链接:http://www.cnblogs.com/yif0118/p/14617687.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号