Zuul网关的应用与作用

1、网关访问方式

通过zuul访问服务的,URL地址默认格式为:http://zuulHostIp:port/要访问的服务名称/服务中的URL

服务名称:properties配置文件中的spring.application.name。

服务的URL:就是对应的服务对外提供的URL路径监听。

2、网关依赖注入 


  1. <!– spring cloud Eureka Client 启动器 –>  
  2. <dependency>  
  3.     <groupId>org.springframework.cloud</groupId>  
  4.     <artifactId>spring-cloud-starter-eureka</artifactId>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>org.springframework.cloud</groupId>  
  8.     <artifactId>spring-cloud-starter-zuul</artifactId>  
  9. </dependency>  
  10. <!– zuul网关的重试机制,不是使用ribbon内置的重试机制  
  11.    是借助spring-retry组件实现的重试  
  12.    开启zuul网关重试机制需要增加下述依赖  
  13.  —>  
  14. <dependency>  
  15.    <groupId>org.springframework.retry</groupId>  
  16.    <artifactId>spring-retry</artifactId> 
  17.  </dependency> 

3、网关启动器 


  1. /**  
  2.  * @EnableZuulProxy – 开启Zuul网关。  
  3.  *  当前应用是一个Zuul微服务网关。会在Eureka注册中心中注册当前服务。并发现其他的服务。  
  4.  *  Zuul需要的必要依赖是spring-cloud-starter-zuul。  
  5.  */  
  6. @SpringBootApplication  
  7. @EnableZuulProxy  
  8. public class ZuulApplication {  
  9.     public static void main(String[] args) {  
  10.         SpringApplication.run(ZuulApplication.class, args);  
  11.     }  

4、网关全局变量配置

4.1 URL路径匹配


  1. # URL pattern  
  2. # 使用路径方式匹配路由规则。  
  3. # 参数key结构:zuul.routes.customName.path=xxx  
  4. # 用于配置路径匹配规则。  
  5. # 其中customName自定义。通常使用要调用的服务名称,方便后期管理  
  6. # 可使用的通配符有: * ** ?  
  7. # ? 单个字符  
  8. # * 任意多个字符,不包含多级路径  
  9. # ** 任意多个字符,包含多级路径  
  10. zuul.routes.eureka-application-service.path=/api/**  
  11. # 参数key结构:zuul.routes.customName.url=xxx  
  12. # url用于配置符合path的请求路径路由到的服务地址。  
  13. zuul.routes.eureka-application-service.url=http://127.0.0.1:8080/ 

4.2 服务名称匹配


  1. # service id pattern 通过服务名称路由  
  2. # key结构 :zuul.routes.customName.path=xxx  
  3. # 路径匹配规则 
  4. zuul.routes.eureka-application-service.path=/api/**  
  5. # key结构 :zuul.routes.customName.serviceId=xxx  
  6. # serviceId用于配置符合path的请求路径路由到的服务名称。  
  7. zuul.routes.eureka-application-service.serviceId=eureka-application-service 

服务名称匹配也可以使用简化的配置:


  1. # simple service id pattern 简化配置方案  
  2. # 如果只配置path,不配置serviceId。则customName相当于服务名称。  
  3. # 符合path的请求路径直接路由到customName对应的服务上。  
  4. zuul.routes.eureka-application-service.path=/api/** 

4.3 路由排除配置


  1. # ignored service id pattern  
  2. # 配置不被zuul管理的服务列表。多个服务名称使用逗号','分隔。  
  3. # 配置的服务将不被zuul代理。  
  4. zuul.ignored-services=eureka-application-service  
  5. # 此方式相当于给所有新发现的服务默认排除zuul网关访问方式,只有配置了路由网关的服务才可以通过zuul网关访问  
  6. # 通配方式配置排除列表。  
  7. zuul.ignored-services=*  
  8. # 使用服务名称匹配规则配置路由列表,相当于只对已配置的服务提供网关代理。  
  9. zuul.routes.eureka-application-service.path=/api/**  
  10. # 通配方式配置排除网关代理路径。所有符合ignored-patterns的请求路径都不被zuul网关代理。  
  11. zuul.ignored-patterns=/**/test/**  
  12. zuul.routes.eureka-application-service.path=/api/** 

4.4 路由前缀配置


  1. # prefix URL pattern 前缀路由匹配  
  2. # 配置请求路径前缀,所有基于此前缀的请求都由zuul网关提供代理。  
  3. zuul.prefix=/api  
  4. # 使用服务名称匹配方式配置请求路径规则。  
  5. # 这里的配置将为:http://ip:port/api/appservice/**的请求提供zuul网关代理,可以将要访问服务进行前缀分类。 
  6. # 并将请求路由到服务eureka-application-service中。  
  7. zuul.routes.eureka-application-service.path=/appservice/** 

5. Zuul网关配置总结

网关配置方式有多种,默认、URL、服务名称、排除|忽略、前缀。

网关配置没有优劣好坏,应该在不同的情况下选择合适的配置方案。扩展:大公司为什么都有API网关?聊聊API网关的作用

zuul网关其底层使用ribbon来实现请求的路由,并内置Hystrix,可选择性提供网关fallback逻辑。使用zuul的时候,并不推荐使用Feign作为application client端的开发实现。毕竟Feign技术是对ribbon的再封装,使用Feign本身会提高通讯消耗,降低通讯效率,只在服务相互调用的时候使用Feign来简化代码开发就够了。而且商业开发中,使用Ribbon+RestTemplate来开发的比例更高。

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章