0
点赞
收藏
分享

微信扫一扫

springcloud组件之集成Zuul实现服务网关

springcloud 组件之集成 Zuul 实现服务网关


一、Zuul 是什么?

Zuul 是 netflix 开源的一个 API Gateway 服务器, 本质上是一个 web servlet 应用。
Zuul 的核心是一系列的 filters, 其作用可以类比 Servlet 框架的 Filter,或者AOP。
Zuul 可以通过加载动态过滤机制,从而实现以下各项功能:
验证与安全保障:
识别面向各类资源的验证要求并拒绝那些与要求不符的请求。
审查与监控:
在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。
动态路由:
以动态方式根据需要将请求路由至不同后端集群处。
压力测试:
逐渐增加指向集群的负载流量,从而计算性能水平。
负载分配:
为每一种负载类型分配对应容量,并弃用超出限定值的请求。
静态响应处理:
在边缘位置直接建立部分响应,从而避免其流入内部集群。
多区域弹性:
跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。

二、创建项目实现服务网关

(一)项目说明

本项目在 springcloud组件之集成Feign实现负载均衡 文中创建的项目 feign 的基础上进行修改。
原项目下已有 3 个 module:eureka-server、provider、consumer。
本文再新建一个 module:zuul-proxy,实现服务网关。
项目目录结构:
在这里插入图片描述

(二)创建模块 zuul-proxy

在这里插入图片描述
在这里插入图片描述

1.添加依赖

添加依赖,如果已按截图操作,还需再 pom.xml 文件中添加 zuul 依赖,完整的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.chaoyue</groupId>
    <artifactId>zuul-proxy</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>zuul-proxy</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
    </properties>
    <dependencies>
        <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>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.添加配置

application.yml 文件中添加如下配置:

server:
  port: 8085  #服务端口
eureka:
  client:
    serviceUrl: #注册中心注册地址
      defaultZone: http://127.0.0.1:8080/eureka/
spring:
  application:
    name: zuul-proxy #服务名称

3.启动类添加注解

启动类添加注解 @EnableEurekaClient 和 @EnableZuulProxy

package com.chaoyue.zuulproxy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class ZuulProxyApplication {

    public static void main(String[] args) {
        SpringApplication.run(ZuulProxyApplication.class, args);
    }

}

4.启动服务

启动 eureka-server、provider、consumer、zuul-proxy 服务,浏览器输入:http://localhost:8080/
在这里插入图片描述

(三)功能实例

1.配置路由规则

(1)添加配置

application.yml 中添加配置,将 /provider/** 请求路由到 server-provider 服务,将 /consumer/** 请求路由到 servie-consumer 服务

zuul:
  routes: #配置服务路由
    service-provider:
      path: /provider/**
    service-consumer:
      path: /consumer/**

(2)运行测试

启动后访问 http://localhost:8085/provider/sayHi 和 http://localhost:8085/consumer/sayHi
在这里插入图片描述
在这里插入图片描述

2.默认路由规则

Zuul 和 Eureka 结合使用可以实现路由自动配置,不需要在配置文件添加配置,自动配置的路由以服务名称为匹配路径,输入 http://localhost:8085/service-provider/sayHi 和 http://localhost:8085/service-consumer/sayHi 即可访问:
在这里插入图片描述

在这里插入图片描述

3.负载均衡

启动 2 个provider 服务(服务端口 8081 和 8083),多次调用 http://localhost:8085/service-provider/sayHi ,可发现显示信息在 8081 和 8083 之间切换。

4.配置访问前缀

application.yml 中添加 prefix 配置:

zuul:
  routes: #配置服务路由
    service-provider:
      path: /provider/**
    service-consumer:
      path: /consumer/**
  prefix: /proxy  #网关路由前缀

由于添加了前缀 /proxy,访问时需带上前缀:
http://localhost:8085/proxy/service-provider/sayHi
在这里插入图片描述

5.过滤敏感头信息

application.yml 中添加 sensitive-headers 配置:

zuul:
  sensitive-headers: Cookie,Set-Cookie,Authorization  #过滤敏感请求头信息

6.添加host头信息

application.yml 中添加 add-host-header 配置:

zuul:
  add-host-header: true  #添加host头信息

7.查看路由信息

(1)添加依赖

pom.xml 文件中添加 spring-boot-starter-actuator 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

(2)添加配置

application.yml 文件中添加配置,开启查看路由的端点:

management:
  endpoints:
    web:
      exposure:
        include: routes

(3)查看基本路由信息

访问:http://localhost:8085/actuator/routes
在这里插入图片描述

(4)查看详细路由信息

访问:http://localhost:8085/actuator/routes/details
在这里插入图片描述

8.过滤器

待续,详见后续博文。

举报

相关推荐

0 条评论