springcloud教程 -- 4.网关zuul的使用详解

一、zuul的简单介绍

强烈建议阅读官网介绍,官网写的非常棒!!!

Zuul官网地址:https://github.com/Netflix/zuul/wiki

1.zuul是什么?

原文搬运:

Zuul is the front door for all requests from devices and web sites to the backend of the Netflix streaming application. As an edge service application, Zuul is built to enable dynamic routing, monitoring, resiliency and security. It also has the ability to route requests to multiple Amazon Auto Scaling Groups as appropriate.

译文:

Zuul是所有来自设备和web站点到Netflix流媒体应用程序后端的请求的前门。作为一个边缘服务应用程序,Zuul的构建是为了支持动态路由、监视、弹性和安全性。它还可以根据需要将请求路由到多个Amazon自动伸缩组。Netflix API流量的数量和多样性有时会导致生产问题迅速而且没有任何警告。我们需要一个允许我们快速改变行为的系统,以便对这些情况做出反应。

2.为什么使用zuul?

Netflix API流量的数量和多样性有时会导致生产问题在没有警告的情况下迅速出现。我们需要一个能让我们迅速改变行为以应对这些情况的系统。

Zuul使用一系列不同类型的过滤器,使我们能够快速、灵活地将功能应用到edge服务。这些过滤器帮助我们执行以下功能:

  身份验证和安全性——为每个资源确定身份验证需求并拒绝不满足需求的请求。

  洞察和监控——在边缘跟踪有意义的数据和统计数据,以便为我们提供准确的生产视图。

  动态路由——根据需要动态地将请求路由到不同的后端集群。

  压力测试——逐步增加集群的流量,以评估性能。

  减少负载——为每种类型的请求分配容量,并删除超过限制的请求。

  静态响应处理——直接在边缘构建一些响应,而不是将它们转发到内部集群

  多区域弹性——跨AWS区域路由请求,以使我们的ELB使用多样化,并使我们的优势更接近我们的成员

3.总结

1.Zuul具有基本的路由功能,外部请求经由zuul设置的策略进行路由,实现系统访问入口的统一,提高系统的安全性

2.zuul具有功能丰富的过滤器,是我们对请求进行加工处理变得更为简单。

二、实际应用demo

接着前文我们创建了springcloud的6个demo工程,本章节介绍如何使用zuul

没看过上文的,请先查看相关文章:

springcloud教程 -- 1.快速搭建入门级demo, 看这一篇就够了

springcloud教程 -- 2.feign的使用实践优雅的发送请求

springcloud教程 -- 3.微服务熔断机制,断路器hystrix的使用详解

1. 接前文的demo基础,在j-cloud下添加moudle:j-cloud-zuul

2.项目结构如下:

3.pom.xml文件内容如下:

<?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>
    <groupId>cn.jorian.framework</groupId>
    <artifactId>j-cloud-zuul</artifactId>
    <version>1.0.0</version>
    <name>j-cloud-zuul</name>
    <description>Demo project for Spring Boot</description>
    <!-- lookup parent from repository -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
        <relativePath />
    </parent>
    <!-- 属性设置 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!-- eureka  -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!-- zuul -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>
        <!--LOMBOK-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
            <scope>provided</scope>
        </dependency>
        <!--单元测试依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <!-- dependency management -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

4.启动器JCloudZuulApplication代码如下:

package cn.jorian.framework;


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
@EnableZuulProxy  //开启zuul代理
@EnableEurekaClient		//zuul服务要注册到Eureka上
public class JCloudZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(JCloudZuulApplication.class, args);
    }
}

5.配置文件application.yml如下:

注意:

1.routes.app-a指的应用app-a,这个名字可改为app-b,app-c

2.routes.app-a.path指的是属于应用app-a的请求,使用**进行通配

3.routes.app-a.servieId指的是请求被指向的应用名称

下图配置代表:http://127.0.0.1:9000/u/addUser   会被重新指向 provider-user/addUser ,而provider-user已经在Eureka中注册,所以最终的请求路径为:http://127.0.0.1:7901/addUser

注意:假如我们系统中启动了两个provider-user实例,那么zuul会自动负载均衡,默认轮询来转发请求。

server:
  port: 9000
spring:
  application:
    name: gateway-zuul
eureka:
  client:
    serviceUrl:
      defaultZone: http://jorian:123456@localhost:8761/eureka
zuul:
  ignoredServices: '*'
  routes:
    app-a:
      path: /u/**
      serviceId: provider-user

 

6.以上步骤做完,依次启动j-cloud-server,j-cloud-provider1,j-cloud-zuul

7.在注册中心查看各个服务是否上线,上线如下:

8.在浏览器输入 网关地址+应用名称+接口,例如:http://localhost:9000/u/user/sayHello

能够返回接口的结果:

 9.负载均衡测试:再启动一个provider-user,即工程:j-cloud-provider2

再次反复访问网关地址+应用名称+接口,例如:http://localhost:9000/u/user/sayHello

返回结果会自动切换,证明zuul对请求进行了负载均衡

第n次:

第n+1次:

10.其余复杂情况请自行挖掘

 

至此,zuul的基本学习已经完成

您可继续关注后续内容更新

或者在github下载完整demo工程:若对您有用,请star,谢谢

 

 

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值