SpringCloud技术指南系列(十二)API网关之Gateway使用

一、概述

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

在SpringCloud全家桶中,API网关有Zuul和gateway两种实现。 1. zuul进来逐渐被gateway取代。 2. zuul可以整合进任何SpringBoot应用 3. gateway基于异步非阻塞模型,使用的netty+webflux实现,不能加入web依赖,默认加载加入webflux依赖。 4. Spring Cloud zuul使用的仍是zuul 1.x,zuul 2.x也是异步非阻塞的。 4. 选用zuul还是gateway,要看使用场景,如果在已有的非WebFlux项目使用,要用zuul。单纯的API网关独立部署,建议gateway。

代码可以在SpringBoot组件化构建https://www.pomit.cn/java/spring/springcloud.html中的EurekaGateway、ZkGateway和ConsulGateway组件中查看,并下载。分别对应三种不同的服务注册方式。

首发地址: 品茗IT-同步发布

如果大家正在寻找一个java的学习环境,或者在开发中遇到困难,可以加入我们的java学习圈,点击即可加入,共同学习,节约学习时间,减少很多在学习中遇到的难题。

二、项目配置

本篇的配置基于服务注册发现的项目基础上,并选择Consul + Gateway为例讲解如何使用zuul做API网关。至于(Eureka + Gateway)和 (zookeeper + Gateway)写法上和(consul + Gateway)是一样的,不再分开章节描述。

这里选择Consul + Gateway为例,是因为它需要一个额外的健康检查接口,其他无区别。

可以参考我前面的文章做对比:

《SpringCloud技术指南系列(五)服务注册发现之Consul服务调用》

《SpringCloud技术指南系列(三)服务注册发现之Eureka服务调用》

《SpringCloud技术指南系列(七)服务注册发现之Zookeeper服务调用》

2.1 引入依赖

需要在建立好的项目中引入spring-cloud-starter-gateway,不能引入spring-boot-starter-web,因为它用的是webflux。

如果需要使用hystrix,要显式引入spring-cloud-starter-netflix-hystrix。

本篇是在consul的服务发现基础上进行gateway的配置,因此还需要引入consul相关配置。

依赖如下:

<?xml version="1.0"?>

父模块pom文件可以在https://www.pomit.cn/spring/SpringCloudWork/pom.xml获取。

2.2 配置文件

这里使用yaml文件写配置,配置文件application.yml:

application.yml:

server:port: 8819
spring:application:name: consulGatewaycloud:consul:host: 127.0.0.1port: 8500discovery:prefer-ip-address: truehealthCheckPath: /consul/healthgateway:discovery:locator:enabled: truelowerCaseServiceId: trueroutes:-  id: myRouteuri: lb://consulFeignpredicates:- Path=/test/**filters:-  StripPrefix=1-  name: Hystrixargs:name: fallbackcmdfallbackUri: forward:/incaseoffailureusethiss-  id: myOutsideRouteuri: https://cn.bing.com/predicates:- Path=/search/**filters:-  StripPrefix=1

这里,表示API网关在8819端口监听,名字是consulGateway。

  • spring.cloud.consul开头的配置时consul服务注册发现的配置。前面章节已经有说明。
  • spring.cloud.gateway.discovery.locator.enabled开启路由转发功能
  • spring.cloud.gateway.discovery.locator.lowerCaseServiceId是指注册到cunsul的服务使用小写。
  • spring.cloud.gateway.routes.*:配置路由转发。id是唯一的,uri如果使用lb:开头,表示使用注册的服务进行负载均衡。predicates.Path:表示请求的路径。filters.StripPrefix表示转发时路径去掉几层前缀。filters.name如果是Hystrix,表示使用Hystrix进行熔断降级,需要配置fallbackUri进行降低转发。

三、服务不可用降级接口

如果配置了hystrix做熔断。当请求次数失败次数过多(我测试第一次是8次,第二次变7次了),将不再请求,直接请求/incaseoffailureusethiss降级。

如图所示,1.01s是请求失败的过程,7次之后,就直接熔断,所以响应时间小于10ms了。

FallbackController:

package 

四、启动

启动类无需做额外的配置,这里只有一个服务注册的注解@EnableDiscoveryClient。

ConsulGatewayApplication :

package 

五、其他web

我们仍可以写自己的web服务,和Gateway的转发互不影响,但是路径别重复了。 ConsulGatewayRest :

package 

六、Consul的健康检测

这个是使用consul做注册中心才需要的。

HealthWeb:

package 

七、使用到的实体

ResultModel:

详细完整的实体,可以访问品茗IT-博客《SpringCloud技术指南系列(十二)API网关之Gateway使用》进行查看

品茗IT-博客专题:https://www.pomit.cn/lecture.html汇总了Spring专题、Springboot专题、SpringCloud专题、web基础配置专题。

快速构建项目

Spring项目快速开发工具:

一键快速构建Spring项目工具

一键快速构建SpringBoot项目工具

一键快速构建SpringCloud项目工具

一站式Springboot项目生成

Mysql一键生成Mybatis注解Mapper

Spring组件化构建

SpringBoot组件化构建

SpringCloud服务化构建

喜欢这篇文章么,喜欢就加入我们一起讨论SpringBoot使用吧!

gateway网关_SpringCloud技术指南系列(十二)API网关之Gateway使用相关推荐

  1. SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现

    SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现 一.概述 分布式链路追踪,是一种用于分析和监控应用程序的方法,尤其是那些使用微服务架构的那些应用.分布式链路跟踪 ...

  2. SpringCloud技术指南系列(十三)分布式锁之Redis实现(redisson)

    SpringCloud技术指南系列(十三)分布式锁之Redis实现(redisson) 一.概述 分布式锁是控制分布式系统之间同步访问共享资源的一种方式.在分布式系统中,常常需要协调他们的动作.如果不 ...

  3. Alamofire源码解读系列(十二)之请求(Request)

    本篇是Alamofire中的请求抽象层的讲解 前言 在Alamofire中,围绕着Request,设计了很多额外的特性,这也恰恰表明,Request是所有请求的基础部分和发起点.这无疑给我们一个Req ...

  4. Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】

    2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...

  5. 苏州科技大学计算机学院 李双娴,苏州大学计算机科学与技术学院第十二次研究生代表大会顺利召开...

    为了更好的总结和部署我院研究生分会的工作,苏州大学计算机科学与技术学院第十二次研究生代表大会于2015年12月5日下午1点在理工楼504教室隆重召开.苏州大学研究生院教育与管理科科长严明老师.院党委副 ...

  6. kotlin杂谈系列十二(Kotlin和Java的互操作)

    Kotlin杂谈系列十二 这次就主要来谈谈kotlin和java互操作的问题 kotlin出来的使命就是为了解决java的模板问题和一些冗长的问题所以kotlin天生就很好的支持了java 所以我们在 ...

  7. Reflex WMS入门系列十二:Reflex里的Location

    Reflex WMS入门系列十二:Reflex里的Location 玩过SAP系统里的人都知道,在SAP系统里库存管理分为IM Level和WM Level.IM Level的仓库,在SAP里被定义为 ...

  8. Highcharts翻译系列十二:gauge测量图

    Highcharts翻译系列十二:gauge测量图 说明 测量图需要highcharts-more.js的支持 属性 参数 描述 默认值 animation 动画 true color 主要颜色或序列 ...

  9. 互动媒体技术课程作业 十二个“一”的人格感受

    互动媒体技术课程作业 十二个"一"的人格感受 (本文与编程无关) 十二个"一"的人格评价--想象为十二个异性追求者 结合以下五个方面评价 开放性(opennes ...

最新文章

  1. HDU 1253-大逃亡(裸-DBFS)
  2. javascript:鼠标拖动图标技术
  3. Day2:C语言学习2
  4. 俄罗斯方块c语言代码及注释,俄罗斯方块C语言代码
  5. 众多电子秤方案免费拿~挑一个?
  6. 会员积分消费系统 php,会员消费管理系统充值营销系统会员积分消费系统.net源码...
  7. C语言if语句实现成绩划分
  8. Asp.net 万年历
  9. 自动化学科前沿讲座分享,作业,自动化与人工智能
  10. 在中信工作的那些日子
  11. 日语 假名对应的汉字来源
  12. PADS Logic 原理图连接
  13. 小白如何学习运营公众号?
  14. 吻吻更健康!揭晓接吻的11大优点
  15. java学习笔记day09 final、多态、抽象类、接口
  16. vue-quill-editor 代码高亮问题
  17. 传输层 -------- TCP(一)
  18. (PTA)7-4 求奇数分之一序列前N项和 (15分)
  19. 选择25k的996还是18k的965
  20. 日神领道----阅读圣经有感

热门文章

  1. mitmproxy抓包 | Python篡改请求参数实战(五)
  2. 【Python】random模块生成多种类型随机数
  3. 编写函数digit(num, k),函数功能是:求整数num从右边开始的第k位数字的值,如果num位数不足k位则返回0。...
  4. ListT.Find用法学习
  5. 策略模式,工厂模式,单例模式编写身份证的验证算法
  6. BroadcastReceiver 广播机制详解
  7. MySQL数据库开启root用户远程登录
  8. jQuery教程10-表单元素选择器
  9. 分析MySQL数据类型的长度
  10. pip download timeout 下载慢,超时解决方法