【SpringCloud-Eureka】Gateway网关

这篇具有很好参考价值的文章主要介绍了【SpringCloud-Eureka】Gateway网关。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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。

核心流程

【SpringCloud-Eureka】Gateway网关

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://localhost:7001/eureka/

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

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

第五步:直接启动这个类,然后在网站输入:localhost:7001即可进入以下网页 【SpringCloud-Eureka】Gateway网关

生产端

既然已经完成了注册服务中心的构建,那么我们还需要构建一个生产端的来注册进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被注册进去了 【SpringCloud-Eureka】Gateway网关

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中也可以发现又注册进了一个客户端 【SpringCloud-Eureka】Gateway网关

验证网关

直接调用生产端的方法,网址:localhost:8001/payment/get/200【SpringCloud-Eureka】Gateway网关

 通过网关去调用生产端,网址:localhost:1221/payment/get/200 【SpringCloud-Eureka】Gateway网关

 可以发现网关的功能已经实现了,可以隐藏注册进服务的生产端端口号文章来源地址https://www.toymoban.com/news/detail-447930.html

到了这里,关于【SpringCloud-Eureka】Gateway网关的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 导入SpringCloud-Eureka依赖的问题Cannot resolve org.springframework.cloud:spring-cloud-starter-netflix-eure

    今天使用SpringCloud时遇到导入SpringCloud-Eureka依赖的问题 Cannot resolve org.springframework.cloud:spring-cloud-starter-netflix-eureka-server:unknown 网上搜了一下,回答多的五花八门,但是不够简单粗暴,这里介绍一个简单的方法,只需要在项目的pom文件中做些设置即可 把大象放进冰箱里需要几步

    2024年02月14日
    浏览(47)
  • Eureka上集成Spring Cloud 微服务网关 gateway

    第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay API 网关是一个搭建在客户端和微服务之间的服务,我们可以在 API 网关中

    2024年02月08日
    浏览(48)
  • springcloud3 GateWay章节-Eureka+gateway动态路由负载均衡1

    gateway相当于所有服务的门户,将客户端请求与服务端应用相分离,客户端请求通过gateway后由定义的路由和断言进行转发,路由代表需要转发请求的地址,断言相当于请求这些地址时所满足的条件,只有同时符合路由和断言才给予转发 gateWay是微服务的API网关,能够实现服务的

    2024年02月12日
    浏览(36)
  • 【SpringCloud】Gateway服务网关

    Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 Gateway网关是我们服务的守门神,所有微服务的统一入口。 网关的

    2024年02月13日
    浏览(51)
  • SpringCloud - GateWay服务网关

    gateway 官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 在微服务架构中,一个系统往往由多个微服务组成,而这些服务可能部署在不同机房、不同地区、不同域名下。这种情况下,客户端(例如浏览器、手机、软件工具等)想要直接请求这些服务

    2024年02月07日
    浏览(52)
  • SpringCloud-网关 Gateway

      官方地址:SpringCloud Gateway   网关统一了服务的入口,可以方便实现对众多服务接口进行管控,对访问服务的身份认证,防报文重放与防数据篡改,功能调用的业务鉴权,响应数据的脱敏,流量与并发控制,甚至基于API调用的计量或者计费等等。更通俗理解,网关可以

    2024年02月04日
    浏览(31)
  • springcloud-网关(gateway)

    Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到API,并为其提供跨领域的关注,如:安全、监控/指标和容错 Route(路由) : 网关的基本构件。它由一个 ID 、一个目的地 URI 、一个谓词( Predicate )集合和一个过滤器( Filter )集合定义。如果集合谓词为真,则路由被

    2024年02月21日
    浏览(38)
  • springcloud~gateway网关

    有时间,我们在搭建微服务时,总希望拿一个比较单纯的,没有污染其它代码的项目来从头开始做,今天我们来建设一个最简单的,gateway项目,它被注册到nacos里,路由配置也存到nacos里,动态实现更新配置功能。 版本:com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2021.0

    2024年02月06日
    浏览(36)
  • 【SpringCloud-5】gateway网关

    网关是干啥用的就不用再说了。 sringcloud中的网关,第一代是zuul,但是性能比较差(1.x是阻塞式的,2.x是基于Netty的),然后有了第二代GateWay,基于Reactor模型 异步非阻塞。  springcloud网关就是一系列的filter,在请求到达真实服务的前后,进行拦截处理。   GateWay 核⼼逻辑:路

    2024年02月09日
    浏览(36)
  • SpringCloud.03.网关Gateway

    目录  网关Gateway的概念: 准备 使用 方式一 因为配置了网关所以可以直接通过gateway发送请求 方式二 修改配置前:http://localhost:8082/provider/run 方式三(动态路由) 导入配置类 Spring Cloud Gateway 是 Spring 官方基于 Spring5.0 、 SpringBoot2.0 和 Project Reactor 等技术开发的网 关 旨在为微服务

    2024年02月01日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包