API网关服务-Spring Cloud Zuul快速入门

目录

简介

Api网关是一个更为只能的应用服务器,他的定义类似面向对象设计模式中的Façade模式,它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端访问都需要经过它来进行调度和过滤。他除了要实现请求路由、负载均衡、校验过滤等功能外,还需要更多的能力,比如与服务治理框架的结合,请求转发是的熔断机制,服务的聚合等一些列高级功能。

Spring Cloud Zuul使用

  1. 添加依赖项spring-cloud-starter-zuul
    1
    2
    3
    4
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zuul</artifactId>
    </dependency>

spring-cloud-starter-zuul包下不仅仅包含zuul-core包,还包含了spring-cloud-starter-hystrix、spring-cloud-starter-ribbon、spring-boot-starter-autuator,提供了负载均衡以及熔断器的支持。

  1. Spring Boot主类添加@EnableZuulProxy注解开启Zuul的API网关功能。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
    * 网关。
    */
    @SpringBootApplication
    @EnableZuulProxy
    public class SpringCloudZuulApplication {
    public static void main(String[] args) {
    SpringApplication.run(SpringCloudZuulApplication.class, args);
    }
    }

我们可以看到@EnableZuulProxy注解其实是一个组合注解,它包含了开启Hystrix熔断技术的功能以及对Eureka注册中心的功能的开启。

1
2
3
4
5
6
7
@EnableCircuitBreaker    # 开启Hystrix熔断器功能。
@EnableDiscoveryClient # 开启Eureka客户端功能。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Import({ZuulProxyMarkerConfiguration.class})
public @interface EnableZuulProxy {
}

  1. 修改配置文件信息。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    spring:
    application:
    name: springcloudzuul
    server:
    port: 8050
    eureka:
    client:
    service-url:
    defaultZone: http://admin:password@localhost:8761/eureka
    instance:
    prefer-ip-address: true
    zuul:
    ignoredServices: springcloudservice # 取消对服务路由机制列表
    routes:
    springclouduser: /user/** # 指定服务路径。
    # Hystrix超时等到时间。
    hystrix:
    command:
    default:
    execution:
    isolation:
    thread:
    timeoutInMilliseconds: 20000
    # ribbon超时等待时间。
    ribbon:
    ReadTimeout: 10000
    ConnectTimeout: 10000

理由规则配置讲解:

  • zuul.ignoredServices:取消路由机制的服务名称列表。
  • zuul.routes.name: 我们可以看到name被标记为红色字体,代表的是注册到erueka服务中的服务名称,例如上面是springclouduser服务的路由规则是通过/user进行访问该服务的所有接口信息。
  • zuul.routes.xxx.path=/xxx/**
    zuul.routes.xxx.url=http://localhost:8080/
    该配置的表示所有符合/xxx/**规则的访问都将转发到http://localhost:8080 地址上,例如:访问服务中的http://localhost:8081/xxx/getUserList 接口时,API网关服务会将该请求路由到http://localhost:8080/getUserList 提供的服务接口上。其中红色部分为路由的名称,可以任意定义,但是一组path和url映射关系的路由名称要相同。
文章目录
  1. 1. 目录
  2. 2. 简介
  3. 3. Spring Cloud Zuul使用