如何在微服务项目中集成spring cloud gateway(超详细)

如何在微服务项目中集成spring gateway

前提:之前我是一直在维护我的自己的一个微服务项目,使用的是spring cloud这个微服务框架,在这个项目,我实践了以下技术及知识:
探索微服务项目的组成,
探索微服务项目的pom文件该如何管理、
集成dubbo、
探索定时任务、
探索前后端跨域、
微服务集成redis、
微服务集成rabbitmq、
设计秒杀流程防止超卖、
以及对秒杀的优化、
探索spring data jpa的集成和使用、
探索auth模块,
探索gateway模块的作用、
探索如何在微服务集成gateway模块,并 实现管理转发所有接口 。。。。

可以说,这个项目就是我的成长史,所有的技术,框架,对架构的理解,都来自这个我自己维护的项目

好了,接下来是具体细节:


1.在项目中创建一个gateway模块,如下:

在这里插入图片描述


2.pom文件
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

    </dependencies>



3.bootstrap.yml文件配置

在这里插入图片描述

spring:
  cloud:
    gateway:
      routes:
        - id: gateway # 路由的id,没有规定规则但要求唯一,建议配合服务名
          #匹配后提供服务的路由地址
          uri: http://localhost:10001
          predicates:
            - Path=/user/** # 断言,路径相匹配的进行路由(注意**为通配符)
server:
  port: 10003



4.GateWayApplication启动类

在这里插入图片描述


5.postmain测试是否成功
http://localhost:10001/user/queryByUser?pageNum=1&pageSize=1

在这里插入图片描述
使用gateway网关的端口访问
在这里插入图片描述

目前只是配置一个模块,还看不出gateway的作用,那如果有多个模块呢

在这里插入图片描述

server:
  port: 10003
spring:
  cloud:
    gateway:
      routes:
        - id: user # 路由的id,没有规定规则但要求唯一,建议配合服务名
          uri: http://localhost:10001 # 匹配后提供服务的路由地址
          predicates:
            - Path=/user/** # 断言,路径相匹配的进行路由(注意**为通配符)

        - id: product 
          uri: http://localhost:10002 
          predicates:
            - Path=/product/**   

        - id: killOrder 
          uri: http://localhost:10002 
          predicates:
            - Path=/killOrder/** 

其实如果想要对某一个模块(端口)的全部路径进行开放,可以直接在uri中写:/**即可
在这里插入图片描述

比如:

- id: product 
          uri: http://localhost:10002 
          predicates:
            - Path=/**   #这样写就是对10002端口下的所有接口进行转发



也许有些人就会疑惑了,设置这个gateway干嘛用呀,他有啥作用啊?

这是我刚接触gateway时最大的疑问,我一直认为,只有知道一个东西的具体作用,或者说为什么要在项目中加这么一个模块,才能让人学的更快,更清晰,记的也更加牢固

    1.首先,如果有了gateway,那么,我们无论有多少个模块,无论每个模块的端口号是多少,我们只需要用gateway的端口号访问就可以了,我们就不需要记住各种模块的端口号了。

这只是gateway最基本的作用,gateway最重要的作用就是可以对所有的接口访问,在进入controller层之前进行拦截,处理。

   2.再举个例子哈,比如跨域配置,我们知道,每一个前后端分离项目,第一个要处理的就是跨域问题,否则根本无法将前后端项目联系起来,至于什么是跨域,看这里:
spring boot前后端分离项目如何解决跨域问题,提供三种方法:
https://blog.csdn.net/yuanchangliang/article/details/108441273

如果没有gateway,那么在后端配置跨域,要么就在每一个模块中都写一个跨域配置类,要么就在每一个controller类上面都使用注解进行配置,简直太麻烦了。

如果有了gateway呢,我们只需要在gateway模块写一个跨域配置类即可,简单又优雅。


你们如果有什么问题,欢迎随时问我


----我是道祖且长,一个在互联网苟且偷生的Java程序员

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三七有脾气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值