一、Zuul网关简介

  1. zuul是spring cloud中的微服务网关。
    网关: 是一个网络整体系统中的前置门户入口。请求首先通过网关,进行路径的路由,定位到具体的服务节点上。
  2. Zuul是一个微服务网关,首先是一个微服务。也是会在Eureka注册中心中进行服务的注册和发现。也是一个网关,请求应该通过Zuul来进行路由。
  3. Zuul网关不是必要的。是推荐使用的。
    使用Zuul,一般在微服务数量较多(多于10个)的时候推荐使用,对服务的管理有严格要求的时候推荐使用,当微服务权限要求严格的时候推荐使用。

二、网关的作用

在这里插入图片描述

三、网关的应用

  1. 添加依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
        
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
 </dependency>
  1. 在main方法上添加@EnableZuulProxy
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableZuulProxy
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  1. 修改application.yml配置文件
server:
  port: 8000
spring:
  application:
    name: zuul
zuul:
  routes:
    # 标识你服务的名字,这里可以自己定义,一般方便和规范来讲还是跟自己服务的名字一样
    EUREKA-CLIENT-PRODUCER:
      #服务映射的路径,通过这路径就可以从外部访问你的服务了,目的是为了不爆露你机器的IP
      #这里zuul是自动依赖hystrix,ribbon的,不是面向单机
      path: /EUREKA-CLIENT-PROVIDER/**
      #这里一定要是你Eureka注册中心的服务的名称,是因为这里配置serviceId因为跟eureka结合了,
      serviceId: EUREKA-CLIENT-PROVIDER
eureka:
  client:
    service-url:
      defaultZone: http://admin:123456@127.0.0.1:8761/eureka/
  1. 相关说明

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

例如:http://127.0.0.1:8000/EUREKA-CLIENT-PROVIDER/get?name=123
b. 服务名称就是配置文件中的spring.application.name。
c. 服务的URL,就是对应的服务对外提供的URL路径

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

服务名称匹配 - service id pattern 通过服务名称路由
key结构 : zuul.routes.customName.path=xxx
#路径匹配规则
zuul.routes.eureka-application-service.path=/api/**
key结构 : zuul.routes.customName.serviceId=xxx
#用于配置符合path的请求路径路由到的服务名称。
zuul.routes.eureka-application-service.serviceId=eureka-application-service
simple service id pattern 简化配置方案
#如果只配置path,不配置serviceId。则customName相当于服务名称。
#符合path的请求路径直接路由到customName对应的服务上。
zuul.routes.eureka-application-service.path=/api/**

路由排除设置 - ignored service id pattern
#配置不被zuul管理的服务列表。多个服务名称使用逗号’,'分隔。
#配置的服务将不被zuul代理。
zuul.ignored-services=eureka-application-service
#通配方式配置排除列表。
zuul.ignored-services=*
#使用服务名称匹配规则配置路由列表,相当于只对已配置的服务提供网关代理。
zuul.routes.eureka-application-service.path=/api/**
#通配方式配置排除网关代理路径。所有符合ignored-patterns的请求路径都不被zuul网关代理。
zuul.ignored-patterns=//test/
zuul.routes.eureka-application-service.path=/api/**

路由前缀配置
#prefix URL pattern 前缀路由匹配
#配置请求路径前缀,所有基于此前缀的请求都由zuul网关提供代理。
zuul.prefix=/api
#使用服务名称匹配方式配置请求路径规则。
#这里的配置将为:http://ip:port/api/appservice/**的请求提供zuul网关代理。
#并将请求路由到服务eureka-application-service中。
zuul.routes.eureka-application-service.path=/appservice/**

zuul网关配置总结

网关配置方式有多种,默认、URL、服务名称、排除|忽略、前缀。
网关配置没有优劣好坏,应该在不同的情况下选择合适的配置方案。
zuul网关其底层使用ribbon来实现请求的路由,并内置Hystrix,可选择性提供网关fallback逻辑。使用zuul的时候,并不推荐使用Feign作为application client端的开发实现。毕竟Feign技术是对ribbon的再封装,使用Feign本身会提高通讯消耗,降低通讯效率,只在服务相互调用的时候使用Feign来简化代码开发就够了。而且商业开发中,使用Ribbon+RestTemplate来开发的比例更高。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐