介绍

网关是微服务最边缘的服务,直接暴露给用户,用来做用户和微服务的桥梁。
Gateway是Spring官方提供的用来代替zuul的网关组件
核心逻辑:路由转发 + 执行过滤器链

三大核心概念

Route((重点 和 eureka 结合做动态路由))

路由信息的组成: 由一个 ID、一个目的 URL、一组断言工厂、一组 Filter 组成。 如果路由断言为真,说明请求 URL 和配置路由匹配。

Predicate(断言)(就是一个返回 bool 的表达式)

Filter(过滤) (重点)

一个标准的 Spring WebFilter。 Web 三大组件(servlet listener filter) mvc interceptor
Spring Cloud Gateway 中的 Filter 分为两种类型的 Filter,分别是 Gateway Filter 和 Global Filter。过滤器 Filter 将会对请求和响应进行修改处理。
一个是针对某一个路由(路径)的 filter 对某一个接口做限流
一个是针对全局的 filter token ip 黑名单

Nginx与Gateway区别

快速入门

路由


1.创建一个Maven项目,之后创建一个Spring Boot项目,添加web依赖


写properties文件,修改启动类名称

# 应用名称
spring.application.name=02-login-service
# 应用服务 WEB 访问端口
server.port=8081


写一个controller

@RestController
public class LoginController {@GetMapping("doLogin")public String doLogin(String name,String pwd){System.out.println(name);System.out.println(pwd);//tokenString token = UUID.randomUUID().toString();return token;}
}

2.创建gateway,添加gateway依赖,注意不可以选择web依赖,web默认是tomcat服务器,gateway默认是netty服务器

修改spring boot版本号,修改启动类名称


修改ym文件

server:port: 80 # 网关一般是80
spring:application:name: gateway-servercloud:gateway:discovery:locator:enabled: true # 只要加了依赖默认开启routes:- id: login-service-route # 路由id,保持唯一uri: http://localhost:8081 # uri同一资源定位符predicates:- Path=/doLogin # 匹配规则,只要路径匹配上/doLogin,就会往uri转发,并且将路径带上

这样配置,访问80下的/doLogin,会转到8081下的/doLogin
测试:


集群(nginx)

nginx 拖两个tomcat
upstream www.gateway.com{
server ip:port;
server ip:prot;
}

server{
listen 8080;
server_name loaclhost

localtion/{
proxy_pass www.gateway.com;
}
}

代码方式的路由

创建一个config类,添加config的注解

@Configuration
public class RouteConfig {}

去spring cloud官网查看gateway
https://spring.io/projects/spring-cloud-gateway
模仿代码模式,写一个访问b站的网关

@Configuration
public class RouteConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("guochaung-id",r -> r.path("/anime").uri("https://www.bilibili.com")).route("movie-id",r -> r.path("/movie").uri("https://www.bilibili.com")).route("variety-id",r -> r.path("/variety").uri("https://www.bilibili.com")).build();}
}

测试:

若在https://www.bilibili.com后面添加好/movie,则不会将前面的在往后面拼接

动态路由

一个服务里面有很多路径(不做负载均衡)

可以给路径加一个前缀

server:port: 80 # 网关一般是80
spring:application:name: gateway-servercloud:gateway:enabled: true # 只要加了依赖默认开启routes:- id: login-service-route # 路由id,保持唯一uri: http://localhost:8081 # uri同一资源定位符predicates:- Path=/service/** # 匹配规则,只要路径匹配上/doLogin,就往uri转发,并且将路径带上

这样就可以随意更改访问的路径,最后都会带着service/path一起拼接到http://localhost:8081后面去

动态路由(可使用负载均衡)

需要结合注册发现中心,思路是将gateway也注册到注册中心,这样就可以获取所有服务的名称,在访问时带上服务名称实现负载均衡
注意:使用可负载均衡的动态路由,因为gateway会从Eureka中服务名等信息,所以不需要对访问路径进行配置,当然配置上也不会冲突。

1.修改gateway
首先给网关添加Eureka依赖,修改对应版本号

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

在yml中配置eureka,并开启动态路由

server:port: 80 # 网关一般是80
spring:application:name: gateway-servercloud:gateway:enabled: true # 只要加了依赖默认开启discovery:locator:enabled: true # 开启动态路由lower-case-service-id: true # 开启小写
eureka:client:service-url:defaultZone: http://localhost:8761/eureka

在启动类中添加开启Eureka客户端注解

@EnableEurekaClient

2.修改login-service
在pom中添加eureka依赖,cloud版本控制,并修改对应版本号

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<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>

配置yml,启动类中添加开启Eureka客户端注解

eureka:client:service-url:defaultZone: http://localhost:8761/eureka
spring:application:name: 02-login-service
server:port: 8081

测试(注意地址中间加应用名称):

注:不注册,只修改配置文件也可以实现

SpringCloud——Gateway(介绍、快速入门、网关集群)相关推荐

  1. RocketMQ一:快速入门和集群架构

    文章目录 RocketMQ快速实战和集群架构 RocketMQ快速实战 下载安装 快速运行RocketMQ RocketMQ集群架构 配置RocketMQ主从集群 搭建管理控制台 RocketMQ消息 ...

  2. zookeeper学习笔记(一)--快速入门与集群部署

    分布式文件存储FASTDFS 目录 概 述 小结 参考资料和推荐阅读 LD is tigger forever,CG are not brothers forever, throw the pot a ...

  3. Tidb集群加mysql_TiDB - 快速入门,集群搭建

    TiDB 是开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式 ...

  4. 《springcloud 二》微服务动态网关,网关集群

    动态网关    实际上是网关和分布式配置中心的整合,通过post手动刷新,生效 动态网关 传统方式将路由规则配置在配置文件中,如果路由规则发生了改变,需要重启服务器.结合整合SpringCloud C ...

  5. Elastic search入门到集群实战操作详解(原生API操作、springboot整合操作)-step1

    Elastic search入门到集群实战操作详解(原生API操作.springboot整合操作)-step2 https://blog.csdn.net/qq_45441466/article/de ...

  6. 教你在Kubernetes中快速部署ES集群

    摘要:ES集群是进行大数据存储和分析,快速检索的利器,本文简述了ES的集群架构,并提供了在Kubernetes中快速部署ES集群的样例:对ES集群的监控运维工具进行了介绍,并提供了部分问题定位经验,最 ...

  7. Kubernetes(k8s)入门及集群部署文档

    文章目录 一.k8s 快速入门 简介 部署方式的进化 k8s能做什么 架构 整体主从方式 Master 节点架构 Node 节点架构 概念 快速体验 流程叙述 二.k8s 集群安装 前置要求 了解ku ...

  8. Kubernetes教程(十一)---使用 KubeClipper 通过一条命令快速创建 k8s 集群

    来自:指月 https://www.lixueduan.com 原文:https://www.lixueduan.com/posts/kubernetes/11-install-by-kubeclip ...

  9. 2、使用 kubeadm 方式快速部署K8S集群

    文章目录 一.kubernetes 官方提供的三种部署方式 二.使用kubeadm搭建k8s集群 2.1 基础环境设置 2.2 安装Docker 2.3 添加kubernetes软件源 2.4 安装k ...

最新文章

  1. iOS用户设计指南 - 平台特征
  2. 蓝牙调试工具如何使用_使用此有价值的工具改进您的蓝牙项目:第2部分!
  3. JAVA8后接口的新特性
  4. 2010版EXCEL下方sheet工作表隐藏了
  5. java 反转jia链表_Java实现单链表反转
  6. 悲痛!临近年关,一位 IT 创业者自杀,曾卖房给员工发工资
  7. csdn积分如何获取攻略
  8. launchpad乐器_PreSonus 发布 ATOM 打击垫控制器(视频)
  9. java 图片识别_java实现图片文字识别的两种方法
  10. MIMO系统模型构建
  11. 平面设计必须知道的尺寸列表
  12. Wsl2 Ubuntu18.04图形化界面,亲测成功
  13. 《思维力:高效的系统思维》读书笔记05 - 快速提升你的沟通表达能力
  14. 【JavaEE】Day11-多线程
  15. 安装vpn和nat以及使用
  16. MATLAB数学建模必备算法--层次分析法AHP
  17. oracle数据库添加序列
  18. 数据监测,都可以监测哪些平台
  19. SQL注入测试平台 SQLol -2.SELECT注入测试
  20. 12大主流平板电脑CPU主控方案平台及其生产厂商

热门文章

  1. Excel 物料BOM根据位号计算用量公式
  2. 你是那种只看《XXXXX从入门到精通》的程序员吗?
  3. 一文读懂舵机工作原理并运用(附代码)
  4. 【OpenWRT】自用总结
  5. tidb数据库隔离级别剖析
  6. ac3168无线网卡驱动下载_星际蜗牛C款i211网卡服务器装Windows sevse2012R2服务器装机篇下...
  7. python创建学生字典_用python创建简单字典
  8. linux安装mysql 5.7 完整步骤
  9. 中国铁路建设行业运作模式与未来建设方向研究报告2022版
  10. java 基础知识点