【微服务笔记16】微服务组件之Gateway服务网关基础环境搭建、高可用网关环境搭建

news2024/11/16 5:23:09

这篇文章,主要介绍微服务组件之Gateway服务网关基础环境搭建、高可用网关环境搭建。

目录

一、Gateway服务网关

1.1、什么是Gateway

1.2、Gateway基础环境搭建

(1)基础环境介绍

(2)引入依赖

(3)添加路由配置信息

(4)运行测试

1.3、Gateway三个核心概念

1.4、Gateway配置信息

(1)routes路由信息配置

(2)defaultFilters默认过滤器配置

(3)predicates断言配置

1.5、高可用网关环境搭建

(1)搭建nginx环境

(2)创建两个Gateway工程


一、Gateway服务网关

1.1、什么是Gateway

在微服务架构里面,会存在很多的微服务应用程序,这些服务集群部署在一起对外提供服务,一般实际开发中,都会通过一个公共的入口地址将微服务应用暴露给客户端,这个公共的入口将其单独作为一个微服务应用,这个应用程序就叫做:服务网关,常见的网关有:zuul、Gateway等,其中Gateway的出现就是为了替代zuul网关。基于网关,可以实现统一用户认证、统一权限校验、接口限流、服务降级、接口调用统计、协议适配等功能。

有五种实现网关功能的方案,分别是:

  • 第一种:nginx + Lua。
  • 第二种:Kong。
  • 第三种:Traefik。
  • 第四种:Spring Cloud Netflix Zuul。
  • 第五种:Spring Cloud Gateway。

1.2、Gateway基础环境搭建

(1)基础环境介绍

这篇文章搭建的基础环境主要包含下面几个工程:

  • 注册中心:eureka服务端(直接使用前几篇文章的应用程序)。
  • 服务提供者:搭建一个服务消费者(consumer-client)、一个服务提供者(provider-client)(直接使用前几篇文章的应用程序)。
  • 网关工程(gateway-server):搭建Gateway网关工程(这篇文章需要创建的新工程)。

(2)引入依赖

  • 创建一个【gateway-server】工程,引入【gateway】依赖。
<!-- 引入 Gateway 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

(3)添加路由配置信息

server:
  port: 8888
spring:
  application:
    name: gateway-server
  # 配置 gateway 路由信息
  cloud:
    gateway:
      # 指定路由信息
      routes:
        - id: consumer-client # 路由唯一标识,一般和微服务应用名称相同即可
          # 目标路由的服务地址,这里采用的是静态路由(将微服务的地址写死在配置文件里面)
          uri: http://localhost:8081/
          # 配置断言,也就是请求的URI满足哪些规则,才可以匹配当前这个routes路由信息
          predicates:
            # 这里使用路由断言,所有 /api/consumer 开头的请求,都将转发到 http://localhost:8081/ 这个服务上面
            - Path=/api/consumer/**

(4)运行测试

依次启动eureka、consumer-client、provider-client、gateway-server四个工程,打开postman,访问gateway-server网关工程访问接口【http://localhost:8888/api/consumer/getUserInfo?username=csdn2023】,此时可以正常返回响应结果,就表示网关工程的基础环境就搭建成功。

1.3、Gateway三个核心概念

Gateway网关中,有三个重要的核心概念,分别是:路由Routes、断言Predicates、过滤器Filter。路由Routes是Gateway网关中最基本的一个组成部分,它主要负责定义微服务的路由信息,它是由路由ID、目标URI、一组断言、一组过滤器组成的。

当客户端一个请求到达Gateway网关的时候,首先会被Gateway Handler Mapping处理,根据URI找到能够匹配的Routes路由信息,然后将路由信息发送到Global Web Handler进行微服务应用程序的接口调用,调用之前会经过一系列的Filter,接口调用成功之后,也会经过一系列的Filter,最终返回给客户端,这就是Gateway网关的一个大致工作原理。

断言是指定路由信息满足哪些规则时候,才会匹配成功,简单的理解为,断言就是一系列的if判断语句,只有当前客户端请求满足条件的时候,才能够找到这个路由信息,然后根据这个路由信息去调用微服务。

过滤器Filter是在调用微服务的过程中,可以在过滤器中增加一些额外的操作,比如:增加header头信息、去掉某些请求参数等等,有两种类型的过滤器:Gateway Filter路由过滤器 和 Global Filter全局过滤器。

1.4、Gateway配置信息

在GatewayProperties类中定义了Gateway网关相关的配置信息,其中大致包含:routes、defaultFilters、streamingMediaTypes等信息,如下所示:

(1)routes路由信息配置

其中routes是最关键的配置信息,用于定义路由信息,每一个路由信息都被抽象成了RouteDefination对象,这个类中包含:id、uri、order、predicates、filters、metadata。

id用于指定路由的唯一标识,一般和微服务名称相同即可;uri用于指定目标微服务的服务地址(可以指定具体的服务地址,也可以结合注册中心实现动态路由功能);order用于指定多种路由中的优先级;predicates用于指定断言;filters用于设置过滤器;metedata用于设置元数据信息。

(2)defaultFilters默认过滤器配置

Gateway给我们提供了一些默认的过滤器,使用的时候通过defaultFilters属性指定,每一个过滤器对象被抽象成一个FilterDefination类。

(3)predicates断言配置

predicates属性用于指定路由的断言,满足断言的URI将匹配当前这个路由信息。断言可以有多个,只要满足其中一个条件,就可以匹配当前这个路由信息,按照顺序依次匹配,只要前面匹配成功了,后面的断言就不会执行了,每一个断言对象都被抽象成了一个PredicateDefination类。

1.5、高可用网关环境搭建

在高并发的场景下,一台Gateway网关服务没办法处理大量的请求,如果此时Gateway服务宕机了,那么整个微服务系统也将不可用,所以为了提高服务的可用性,需要对Gateway部署多台服务结点,也就是集群部署Gateway网关。

那这里就有一个问题啦,客户端应该和哪个Gateway进行交互呢???为了解决这个问题,就需要借助于Nginx服务器来实现请求的分发,将请求依次分发到不同的Gateway网关中,从而实现高可用的网关环境。

(1)搭建nginx环境


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    upstream gateway {
        server 127.0.0.1:8888;
        server 127.0.0.1:9999;
    }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }
        location /api-gateway {
            # 负载均衡
            proxy_pass http://gateway;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

(2)创建两个Gateway工程

要实现Gateway网关的高可用,就需要部署多台网关工程,然后通过nginx请求转发,指定通过哪一台Gateway网关进行请求处理。采用这种模式搭建的Gateway网关,就可以实现高可用,即使其中一台Gateway宕机了,也有其他的Gateway可以继续提高服务。

到此, Gateway服务网关的基础环境、高可用网关环境搭建就搭建完啦。

综上,这篇文章结束了,主要介绍微服务组件之Gateway服务网关基础环境搭建、高可用网关环境搭建。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速上手Navicat~

众所周知&#xff0c; Navicat是一款轻量级的用于MySQL连接和管理的工具&#xff0c;非常好用&#xff0c;使用起来方便快捷&#xff0c;简洁。下面我会简单的讲一下其安装以及使用的方法。并且会附带相关的永久安装教程。 简介 一般我们在开发过程中是离不开数据库的&#xf…

【Unity VR开发】结合VRTK4.0:添加对象追随器

语录&#xff1a; 我已经准备好了足够挡雨的伞&#xff0c;可是却迟迟没有等到雨的到来&#xff0c;这样的尴尬只是我漫长人生中的小插曲罢了。 前言&#xff1a; 对象追随器的目的是让一个或多个游戏对象跟随场景中的另一个对象&#xff0c;而无需将游戏对象嵌套在彼此之下。 …

『pyqt5 从0基础开始项目实战』13. 打包生成exe(保姆级图文)

目录 项目源码打包exe打开闪退需要db文件夹总结 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&#xff0c;持续更新中 项目源码 请查阅专栏上文获取源码 ## 安装库包 python pip install pyinstaller ![…

Stable Diffusion的原理

CSDN-markdown语法之怎样使用LaTeX语法编写数学公式 参考视频&#xff1a;【diffusion】扩散模型详解&#xff01;原理代码&#xff01; 用一颗桃树为你讲清楚 知识点&#xff1a;AI绘图原理 Diffusion扩散模型 Windows深度学习环境搭建&#xff1a;Windows深度学习环境搭建 …

FFmpeg开发笔记(三)FFmpeg的可执行程序介绍

外界对于FFmpeg主要有两种使用途径&#xff0c;一种是在命令行运行FFmpeg的可执行程序&#xff0c;该方式适合没什么特殊要求的普通场景&#xff1b;另一种是通过代码调用FFmpeg的动态链接库&#xff0c;由于开发者可以在C代码中编排个性化的逻辑&#xff0c;因此该方式适合厂商…

一篇文章介绍分布式事务

1、事务的基本概念 事务 事务指的就是一个操作单元&#xff0c;在这个操作单元中的所有操作最终要保持一致的行为&#xff0c;要么所有操作都成功&#xff0c;要么所有的操作都被撤销。简单地说&#xff0c;事务提供一种“要么什么都不做&#xff0c;要么做全套”机制。 本地…

【越早知道越好】的道理——能够大大提升效率的【快捷键】

文章目录 1️⃣虚拟桌面第一步&#xff1a;打开任务视图第二步&#xff1a;创建桌面第三步&#xff1a;桌面切换第四步&#xff1a;桌面删除 2️⃣窗口切换3️⃣桌面分屏如何分屏 前言&#x1f9d1;‍&#x1f3a4;&#xff1a;作为程序员&#x1f468;‍&#x1f4bb;&#xf…

scratch足球射门练习 中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析2023年3月

目录 scratch足球射门练习 一、题目要求 1、准备工作 2、功能实现 二、案例分析

基于Java+SpringBoot+Vue前后端分离仓库管理系统设计实现

基于JavaSpringBootVue前后端分离仓库管理系统设计实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…

RocketMQ 5.0 时代,6 张图带你理解 Proxy!

大家好&#xff0c;我是君哥。今天来聊一聊 RocketMQ 5.0 中的 Proxy。 RocketMQ 5.0 为了更好地拥抱云原生&#xff0c;引入了无状态的 Proxy 模块&#xff0c;新的架构图如下&#xff1a; 引入 Proxy 模块后&#xff0c;Proxy 承担了协议适配、权限管理、消息管理等计算功能…

JVM垃圾回收GC 详解(java1.8)

目录 垃圾判断算法&#xff08;你是不是垃圾&#xff1f;&#xff09; 引用计数法 可达性算法 对象的引用 强引用 软引用 弱引用 虚引用 对象的自我救赎 垃圾回收算法--分代 标记清除算法 复制算法 标记整理法 垃圾处理器 垃圾判断算法&#xff08;你是不是垃圾&…

Anaconda+PyTorch环境搭建

AnacondaPyTorch环境搭建 环境Anaconda安装配置下载镜像 cuda和cudnncudacudnn pytorch参考文章 环境 win10 22hx nvidia driver 528.89 Anaconda安装 在清华镜像中选择合适的版本及对应系统 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载好之后一路next即可…

vscode笔记

vscode怎么中止运行 控制台—输出&#xff0c;结束运行&#xff1a; 控制台右击&#xff0c;然后点击Stop Code Run或者CtrlAltM快捷键 停止正在运行的Python脚本 在VS Code的右下角&#xff0c;选择正在运行的终端&#xff0c; 点右键&#xff0c;终止终端 VS code怎么终止…

简单的小型C++项目怎么用CMAKE进行管理

项目目录&#xff1a; 根目录下共有两个文件夹&#xff0c;分别为include、src&#xff0c;有两个文件&#xff0c;分别为CMakeLists.txt和main.cpp main函数 可以看出&#xff0c;include了func.h&#xff0c;且func.h的声明在include文件夹下&#xff0c;定义在src文件夹下的…

全网唯一!Matlab世界顶尖艺术品配色包Rmetbrewer

想要绘制一幅颜色搭配合理、好看又不花哨的论文插图&#xff0c;该如何操作呢&#xff1f; 正所谓求其上者得其中&#xff0c;求其中者得其下。 那么&#xff0c;向高手借鉴思路&#xff0c;无疑是一种不落下乘的好策略。 而在色彩搭配领域&#xff0c;像莫奈、梵高这些世界…

WPS表格数据出现绿色小三角,单引号,E+的原因说明和完美解决方案,终结版。

复盘问题的原因&#xff0c;了解原因的原因&#xff0c;预测事件的结果&#xff0c;推测结果产生的结果。 问题描述&#xff1a;好好的数据&#xff0c;复制进wps&#xff0c;左上角就会出现绿色三角。怎么去掉呢&#xff1f; 迷惑问题2&#xff1a;点击之后&#xff0c;绿色三…

代码优化- 前端优化

常量折叠 基本思想&#xff1a;在编译期间计算表达式的值&#xff08;编译时静态计算&#xff09; 例如&#xff1a;a 3 5 > a 8&#xff0c;if (true && false) ... > if (false) 好处是&#xff1a;语法树的节点数量减少了&#xff0c;意味着编译器要维护…

STM32—0.96寸OLED液晶显示

本文主要介绍基于STM32F103的0.96寸的OLED液晶显示&#xff0c;详细关于0.96寸OLED液晶屏幕的介绍可参考这篇博客&#xff1a;https://blog.csdn.net/u011816009/article/details/130119426 一、简介 OLED被称为有机激光二极管&#xff0c;也被称为有机激光显示&#xff0c;O…

学生宿舍管理系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/87700423 更多系统资源库…

Sprinboot聚合项目归荑

1、前言 在创建springboot项目时&#xff0c;都会有一个Main方法。如果将Springboot项目设计成聚合项目时&#xff0c;我们是不是要把所有的子项目都按照Springboot的方式创建呢&#xff1f;如果是会出现什么问题&#xff0c;以及我们怎么解决呢&#xff1f; 如果我们使用maven…