API 网关服务 Spring Cloud Zuul

2019-10-16 0 By admin

通过Eureka 服务注册中心,可以实现架构集群内部服务之间的相互调用;如果是外部的服务调用集群服务的API接口,则不能仅仅通过Eureka注册中心实现。
API 网关:它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端的访问都需要通过它来进行调度和过滤。它除了实现请求路由、负载均衡、校验过滤等功能外,还需要更多能力,比如与服务治理框架结合、请求转发时的熔断机制、服务的聚合等一系列高级功能。

对于路由规则和服务实例的维护问题。Spring Cloud Zuul 通过与 Spring Cloud Eureka 进行整合,将自身注册为Eureka 服务治理下的应用,同时从Eureka 中获得了所有其他微服务的实例信息。

构建API 网关服务

这里采用的是Zuul 结合Eureka 的路由方式;所有在构建Zuul API网关服务前,需要先启动Eureka Service 以及创建一个服务提供者。

一、POM 文件依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

二、工程启动类配置

在工程启动类中,添加注解 @EnableZuulProxy

package com.miniooc.eurekazuul;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
 
/**
 * EurekaZuulApplication
 */
@EnableZuulProxy
@SpringBootApplication
public class EurekaZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaZuulApplication.class, args);
    }
}

三、编辑配置文件

server:
  port: 8080
spring:
  application:
    name: eureka-gateway
eureka:
  instance:
    hostname: localhost
    # 表示eureka client间隔多久去拉取服务注册信息,默认为30秒,如果要迅速获取服务注册状态,可以缩小该值
    lease-renewal-interval-in-seconds: 5
    # 表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则将移除该instance。
    # 默认为90秒
    # 如果该值太大,则很可能将流量转发过去的时候,该instance已经不存活了。
    # 如果该值设置太小了,则instance则很可能因为临时的网络抖动而被摘除掉。
    # 该值至少应该大于 leaseRenewalIntervalInSeconds
    lease-expiration-duration-in-seconds: 10
  client:
    serviceUrl:
      defaultZone: http://localhost:9527/eureka/
zuul:
  routes:
    api-ribbon:
      path: /ribbon/*    #URL路由到eureka注册的应用
      serviceId: eureka-provider  #eureka 注册的应用