【SpringCloud-Eureka】Gateway网关

news2025/1/21 4:54:27

Gateway概念

特征

核心流程

Eureka服务注册

生产端

Gateway网关

验证网关


Gateway概念

路由(Route)是GateWay中最基本的组件之一,表示一个具体的路由信息载体,主要由下面几个部分组成:

  1. id:路由唯一标识,区别于其他的route

  2. url: 路由指向的目的地URL,客户端请求最终被转发到的微服务

  3. order: 用于多个Route之间的排序,数值越小越靠前,匹配优先级越高

  4. predicate:断言的作用是进行条件判断,只有断言为true,才执行路由

  5. filter: 过滤器用于修改请求和响应信息

特征

(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0

(2)集成 Hystrix 断路器

(3)集成 Spring Cloud DiscoveryClient

(4)Predicates 和 Filters 作用于特定路由,易于编写的 Predicates 和 Filters

(5)具备一些网关的高级功能:动态路由、限流、路径重写

这里尤其需要注意三个关键术语:

①Filter(过滤器):

和Zuul的过滤器在概念上类似,可以使用它拦截和修改请求,并且对上游的响应,进行二次处理。过滤器为org.springframework.cloud.gateway.filter.GatewayFilter类的实例。

②Route(路由):

网关配置的基本组成模块,和Zuul的路由配置模块类似。一个Route模块由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配,目标URI会被访问。

③Predicate(断言):

这是一个 Java 8 的 Predicate,可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。断言的输入类型是一个 ServerWebExchange。

核心流程

Eureka服务注册

        在做Gateway网关服务前,我们需要先注册一个服务中心,否则无法使用网关。这里我使用的是Eureka这个服务注册中心。

第一步:首先构建Eureka模块,命名随意。可以通过Maven也可以使用Spring来构建项目。

第二步:修改pom.xml,引入依赖。

<dependencies>
    <!--EurekaServer-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <!--SpringBoot-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <!--简化开发-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

第三步:在application.yml中进行配置

server:
  port: 7001

eureka:
  instance:
    hostname: eureka7001.com #Eureka服务器的实例名称
  client:
    register-with-eureka: false #不向注册中心注册自己
    fetch-registry: false #不需要去检索服务
    service-url:
      #设置与EurekaServer交互的地址查询服务和注册服务都需要依赖这个地址
      defaultZone: http://eureka7001.com:7001/eureka/

第四步:启动类上添加注解

@SpringBootApplication
@EnableEurekaClient //此注解是用于在Eureka注册客户端使用
public class Gateway1221 {
    public static void main(String[] args) {
        SpringApplication.run(Gateway1221.class,args);
    }
}

第五步:直接启动这个类,然后在网站输入:localhost:7001即可进入以下网页

生产端

既然已经完成了注册服务中心的构建,那么我们还需要构建一个生产端的来注册进Eureka中。

第一步:创建模块 命名随意。

第二步:在pom.xml中引入依赖

<dependencies>
    <!--EurekaClient-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.23</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

第三步:在application.yml中进行配置

server:
  port: 8001

spring:
  application:
    name: cloud-payment-service
    
eureka:
  client:
    register-with-eureka: true #表明将自己注册进EurekaServer
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/
  instance:
    instance-id: payment8001 #注册的服务名称

第四步:在启动类上添加注解

@SpringBootApplication
@EnableEurekaClient  //此注解是用于在Eureka注册客户端使用
public class Payment8001Application {
    public static void main(String[] args) {
        SpringApplication.run(Payment8001Application.class,args);
    }
}

第五步:写controller层的逻辑(由于简化开发 在此不写业务层逻辑)

@RestController
public class PaymentController {
	@GetMapping("/payment/get/{id}")
    public String getPaymentById(@PathVariable("id") Long id){
        return "查询成功,id为:" + id;
    }
}

第五步:启动此类 在Eureka注册中心上可以发现cloud-payment-service被注册进去了

Gateway网关

第一步:构建模块

第二步:在pom.xml中引入依赖

<dependencies>
    <!--Gateway网关-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <!--使用Eureka服务注册中心-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!--简化开发-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
</dependencies>

第三步:修改application.yml

server:
  port: 1221

spring:
  application:
    name: cloud-gateway
  cloud:
    #配置路由
    gateway:
      #这里可以配置多个路由
      routes:
        - id: payment_routh #路由的id
          uri: http://localhost:8001 #匹配后提供服务的路由地址
          predicates:
            - Path=/payment/get/** #断言 路径相匹配的进行路由

eureka:
  instance:
    hostname: cloud-gateway
  client:
    register-with-eureka: true #表明将自己注册进EurekaServer
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/

第四步:启动类上添加注解

@SpringBootApplication
@EnableEurekaClient //此注解是用于在Eureka注册客户端使用
public class Gateway1221 {
    public static void main(String[] args) {
        SpringApplication.run(Gateway1221.class,args);
    }
}

第五步:启动Gateway类,Eureka中也可以发现又注册进了一个客户端

验证网关

直接调用生产端的方法,网址:localhost:8001/payment/get/200

 通过网关去调用生产端,网址:localhost:1221/payment/get/200

 可以发现网关的功能已经实现了,可以隐藏注册进服务的生产端端口号

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

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

相关文章

Cadence Allegro在PCB中手动或者自动添加差分对属性

设计PCB过程中&#xff0c;若设计中有差分对信号&#xff0c;则需要将是差分的2个信号设置为差分对&#xff0c;设置差分对有2种方式&#xff1a;手动添加及自动添加一、手动添加差分对&#xff1a;1、点击Setup-Constraints-Constraint Manager调出CM规则管理器&#xff0c;然…

GAN系列之动漫风格迁移AnimeGAN2

动漫是我们日常生活中常见的艺术形式&#xff0c;被广泛应用于广告、电影和儿童教育等多个领域。目前&#xff0c;动漫的制作主要是依靠手工实现。然而&#xff0c;手工制作动漫非常费力&#xff0c;需要非常专业的艺术技巧。对于动漫艺术家来说&#xff0c;创作高质量的动漫作…

项目分享 | MindSpore Insight AI可视化工具开发心得

01 概述 MindSpore Insight是昇思MindSpore的可视化调试调优工具。作为开发者&#xff0c;我参与了MindSpore Insight工具部分功能的开发。本文将对MindSpore Insight进行简要介绍、其次介绍在开发中所用开发框架Vue的响应式原理。 02 MindSpore Insight介绍 MindSpore Insig…

机器学习笔记之波尔兹曼机(二)梯度求解(正相、负相均采用MCMC)

机器学习笔记之波尔兹曼机——基于MCMC的梯度求解引言回顾&#xff1a;波尔兹曼机波尔兹曼机的结构表示模型参数的对数似然梯度基于MCMC梯度求解过程存在的问题关于单个变量的后验概率关于单个变量后验概率的推导过程单个变量后验概率与受限玻尔兹曼机引言 上一节介绍了波尔兹…

【Java基础知识复盘】基础语法篇

本人知识复盘系列的博客并非全部原创&#xff0c;大部分摘自网络&#xff0c;只是为了记录在自己的博客方便查阅&#xff0c;往后也会陆续在本篇博客更新本人查阅到的新的知识点&#xff0c;望悉知&#xff01; 基础语法 数据类型 定义 java语言是强类型语言&#xff0c;对于…

TiDB丨教你一招,实现MySQL与TiDB灵活切换

文章目录一、前言二、MySQL与TiDB切换方案1. 部署DM集群2. 添加数据源3. 创建同步任务三、 切换到 TiDB1、停止DM数据同步2、开启 Binlog 增量同步四、 故障切换回 MySQL五、总结一、前言 在日常工作中&#xff0c;原应用系统是跑在单机MySQL上&#xff0c;但随着业务量的慢慢…

读研转码,纠结技术方向

作者&#xff1a;阿秀校招八股文学习网站&#xff1a;https://interviewguide.cn这是阿秀的第「227」篇原创你好&#xff0c;我是阿秀。很多本科非科班的小伙伴都会选择通过读个研来达到转码的目的&#xff0c;主要是想给自己一个2-3年的缓冲时间。其中有的研究生专业是计算机的…

一文带你了解MindSpore的知识及安装入手

&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d; &#x1f947;博主昵称&#xff1a;Jovy. &#x1f35f;博客主页…

自动控制原理笔记-控制系统的数学模型

目录 建模方法 控制系统的数学模型——微分方程&#xff1a; 将方框图变为具体公式&#xff1a; 非线性系统微分方程的线性化&#xff1a; 线性定常微分方程的求解&#xff1a; 拉普拉斯变换的有关概念&#xff1a; 复数的有关概念&#xff1a; 拉氏变换的定义&#xf…

DolphinDB 分布式表数据更新原理和性能介绍

1. 概述 DolphinDB 从 1.30.6 版本开始支持更新分布式表数据。更新操作支持事务&#xff0c;具备事务 ACID 的特性&#xff0c;且通过 MVCC 实现快照隔离级别。DolphinDB 为多模数据库&#xff0c;目前支持两种存储引擎&#xff1a; OLAP 和 TSDB &#xff08;详见 DolphinDB …

xcode使用gdal库

GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。 GDAL提供对多种栅格数据的支持&#xff0c;包括Arc/Info ASCII Grid(asc)&#…

4 个分析 GameFi 项目的工具

Nov. 2022, Vincy 区块链游戏通常有几种 token、几十种类别的 NFT&#xff0c;以及复杂的奖励机制来吸引和留住玩家。同时添加机器人和清洗交易&#xff0c;使得准确评估特定项目的有机利益和潜力变得具有挑战性。 这就是为什么在投入时间和金钱之前分析 GameFi 项目的基础数…

Linux中的Rsync备份服务

目录 一、备份基本概述 1.备份的定义 2.备份的原因 3.备份分类 &#xff08;1&#xff09;完全备份 &#xff08;2&#xff09;增量备份 4.实现备份工具 二、Rsync——远程同步 1.Rsync基本介绍 2.Rsync同步模式 &#xff08;1&#xff09;推 &#xff08;2&#xf…

【Linux】项目自动化构建工具make / Makefile 及进度条小程序

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;make项目管…

关于对死锁的理解

文章目录什么是死锁&#xff1f;举例理解死锁如何解决死锁锁池与等待池的理解什么是锁池与等待池锁池与等待池的区别两个线程交替执行什么是死锁&#xff1f; 所谓死锁&#xff0c;是指互斥锁标记使用不当造成多个线程&#xff0c;相互持有对方想要申请的资源&#xff0c;不释…

HummerRisk V0.7.0:支持京东云、webhook、PDF下载等

HummerRisk V0.7.0发布&#xff1a;新增京东云支持&#xff0c;系统增加webhook支持&#xff0c;灵活扩展&#xff0c;新增多种页面的PDF下载&#xff0c;新增主机的批量导入和Windows类型主机的检测支持。 感谢社区中小伙伴们的反馈&#xff0c;你们的认可是我们前进的动力。…

四旋翼无人机学习第16节--labview开发allegro的PAD与封装查询工具

文章目录1 前言2 使用展示(有labview软件)2.1 使用界面展示2.2 配置文件展示2.3 封装检索2.4 pad检索2.5 软件退出3 使用展示(无labview软件)4 源文件下载方式1 前言 在学习allegro过程中&#xff0c;设计封装需要先设计组成封装的PAD&#xff0c;也就是使用Padstack Editor工…

Linux学习-93-SELinux安全上下文操作

18.6 SELinux安全上下文查看方法 SELinux 管理过程中&#xff0c;进程是否可以正确地访问文件资源&#xff0c;取决于它们的安全上下文。进程和文件都有自己的安全上下文&#xff0c;SELinux 会为进程和文件添加安全信息标签&#xff0c;比如 SELinux 用户、角色、类型、类别等…

Android设计模式详解之原型模式

前言 原型模式是一个创建型设计模式。 定义&#xff1a;用原型实例指定创建对象的种类&#xff0c;并通过复制这些原型创建新的对象。 使用场景&#xff1a; 类初始化需要消耗非常多的资源&#xff0c;这个资源包括数据、硬件资源&#xff0c;通过原型复制避免这些消耗&…

音质更出色的骨传导耳机,设计也很时尚,南卡Runner CC3上手

这两年我几乎每天都会用耳机&#xff0c;现在耳机的种类也不少&#xff0c;如果是户外健身的话&#xff0c;我觉得骨传导耳机比挂脖式的耳机更好用&#xff0c;这种耳机因为不入耳的使用方式&#xff0c;在我们听音乐的同时&#xff0c;还可以更清晰地感知周围的情况&#xff0…