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

  首先,对千路由规则与服务实例的维护间题。 SpringCloud Zuul 通过与Spring Cloud Eureka进行整合, 将自身注册为Eureka服务治理下的应用, 同时从Eureka中获得了所有其他微服务的实例信息;其次, 对千类似签名校验、 登录校验在微服务架构中的冗余问题。 理论上来说, 这些校验逻辑在本质上与微服务应用自身的业务并没有多大的关系, 所以 它们完全可以独立成一个单独的服务存在, 只是它们被剥离和独立出来之后, 并不是给各个微服务调用, 而是在API网关服务上进行统一调用来对微服务接口做前置过滤, 以实现对微服务接口的拦截和校验

构建网关

创建一个基础的Spring Boot工程, 命名为api-gateway, 并在 pom.xml中引入spring-cloud-starter-zuul依赖, 具体如下

<parent>
  <groupld>org.springframework.boot</groupid>
  <artifactld>spring-boot-starter-parent</artifacttd>
  <version>l.3.7.RELEASE</version>
  <relativePath/>
</parent>
<dependencies>
  <dependency>
    <groupid>org.springframework.cloud</groupid>
    <artifactld>spring-cloud-starter-zuul</artifactid>
  </dependency>
</dependencies>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupld>org.springframework.cloud</groupld>
      <artifactid>spring-cloud-dependencies</artifactid>
      <version>Brixton.SRS</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

对于spring-cloud-starter-zuul依赖,该模块中不仅包含了Netflix Zuul的核心依赖 zuul-core,它还包含了下面这些网关服务需要的重要依赖:

  • spring-cloud-starter-hystrix: 该依赖用来在网关服务中实现对微服务转发时候的保护机制, 通过线程隔离和断路器,防止微服务的故障引发API网关资源无法释放, 从而影响其他应用的对外服务
  • spring-cloud-starter-ribbon:该依赖用来实现在网关服务进行路由转发时候的客户端负载均衡以及请求重试
  • spring-boot-starter-actuator:该依赖用来提供常规的微服务管理端点。 另外, 在Spring Cloud Zuul中还特别提供了/routes端点来返回当前的所有路由规则

创建应用主类, 使用@EnableZuulProxy注解开启Zuul的API网关服务功能

@EnableZuulProxy
@SpringCloudApplication
public class Application {
public static void main(String[] args) {
  new SpringApplicationBuilder(Application.class) .web(true) .run(args);
}
}

在application.properties中配置Zuul应用的基础信息, 如应用名、 服务端口号等, 具体内容如下:

spring.application.name=api-gateway
server.port=5555

第七章 API网关服务:Spring Cloud Zuul的更多相关文章

  1. SpringCloud---API网关服务---Spring Cloud Zuul

    1.概述 1.1 微服务架构出现的问题   及  解决: 1.1.1 前言 每个微服务应用都提供对外的Restful API服务,它通过F5.Nginx等网络设备或工具软件实现对各个微服务的路由与负载 ...

  2. 网关服务spring cloud zuul

    Zuul例子配置文件 spring.application.name=switch-gateway server.port=5555 请求路由 传统路由方式 zuul.routes.api-a-url ...

  3. API网关服务Zuul-Spring Cloud学习第五天(非原创)

    文章大纲 一.Zuul是什么二.Zuul的基本实现三.路由配置细节四.异常处理细节五.项目源码与参考资料下载六.参考文章   一.Zuul是什么   到目前为止,我们Spring Cloud中的内容已 ...

  4. 网关服务Spring Cloud Gateway(二)

    上一篇文章服务网关 Spring Cloud GateWay 初级篇,介绍了 Spring Cloud Gateway 的相关术语.技术原理,以及如何快速使用 Spring Cloud Gateway ...

  5. 网关服务Spring Cloud Gateway(一)

    Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gateway ,相比之前我们使用的 Zuul(1.x) 它有哪些优势呢?Zuul(1.x) 基于 Servlet,使 ...

  6. api网关揭秘--spring cloud gateway源码解析

    要想了解spring cloud gateway的源码,要熟悉spring webflux,我的上篇文章介绍了spring webflux. 1.gateway 和zuul对比 I am the au ...

  7. 网关服务Spring Cloud Gateway(三)

    上篇文章介绍了 Gataway 和注册中心的使用,以及 Gataway 中 Filter 的基本使用,这篇文章我们将继续介绍 Filter 的一些常用功能. 修改请求路径的过滤器 StripPrefi ...

  8. Consul集群加入网关服务(Spring Cloud Gateway)

    Consul集群加入网关服务 架构示意图 外部的应用或网站通过外部网关服务消费各种服务,内部的生产者本身也可能是消费者,内部消费行为通过内部网关服务消费. 一个内部网关和一个外部网关以及一个Consu ...

  9. Spring Cloud Zuul 1(API 网关服务)

    API网关是一个更为智能的应用服务器,它的存在就像是整个微服架构系统的门面一样,所有的外部客户端访问都需要经过它来进行调度和过滤. 它实现的功能包括:请求路由.负载均衡.校验过滤等功能. Spring ...

随机推荐

  1. Leetcode 429. N-ary Tree Level Order Traversal

    bfs class Solution: def levelOrder(self, root: 'Node') -> List[List[int]]: q,ans=[root],[] while ...

  2. topcoder WCNMLGB

    点开题->断开连接->再也上不去->我玩NM

  3. 每天一个linux命令(文件操作):【转载】find 命令的参数详解

    find一些常用参数的一些常用实例和一些具体用法及注意事项. 1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用.可以使用某种文件名模式来匹配文件 ...

  4. SPOJ104 Highways 【矩阵树定理】

    SPOJ104 Highways Description In some countries building highways takes a lot of time- Maybe that's b ...

  5. Google的跨平台开发高质量原生 UI 的移动 SDK---Flutter免费且开源

    Flutter开发 https://www.cnblogs.com/zengfp/p/9927860.html Flutter 是 Google 用以帮助开发者在 iOS 和 Android 两个平台 ...

  6. 微软Enterprise Library 4.1和Unity 1.2

    说明 微软模式与实践团队今天发布了Enterprise Library 4.1和Unity 1.2版本,这次发布的主要新特性如下: 1. 支持Visual Studio 2008 SP1 2. Uni ...

  7. Oracle冷备份和热备份的实践(原创)

    参考本博转发的备份博文和上传的文件,进行了冷热备份实践并进行了记载以备以后查阅,本次实践的环境是win10,安装了oracle11g 一.冷备份 1.cmd->sqlplus /nolog 2. ...

  8. jdk1.8新特性之lambda表达式

    lambda表达式其实就是指一个匿名函数,应用最广泛的就是匿名内部类的简化.在jdk1.8之前,我们定义一个匿名内部类可能需要写一大坨代码,现在有了lambda之后,可以写的很简洁了.但不是说lamb ...

  9. RK3288 USB UVC camera 摄像头 VIDIOC_DQBUF Failed!!! err[I/O error]

    RK3288     Android5.1   多个品牌USB摄像头 同一块主板和代码,大部分品牌的USB摄像头可以正常使用,只有某一款USB摄像头不能使用. 插上摄像头,底层可以识别到摄像头. &l ...

  10. golang的slice作为函数参数传值的坑

    直接贴代码 func sliceModify(slice []int) { // slice[0] = 88 slice = append(slice, ) } func main() { slice ...