还不知道微服务的入口?快看这里,手把手实战网关组件Gateway,一发入魂~

1、Gateway简介

Gateway项目提供了一个构建在 Spring 生态系统之上的 API 网关,包括: Spring 5、 Spring Boot 2和 Project Reactor。Spring Cloud Gateway 旨在提供一种简单而有效的方法来路由到 api,并为它们提供交叉关注点,如安全性、监视/度量和弹性。

官网链接直通车gateway

Spring Cloud Gateway 的特点:

  1. 基于 Spring Framework 5、 Project Reactor 和 Spring Boot 2.0构建
  2. 能够匹配任何请求属性上的路由。
  3. 基于路由的条件构造器Predicates 和过滤器filter
  4. 断路器集成。
  5. 集成 Spring Cloud DiscoveryClient
  6. 易于编写的路由的条件构造器Predicates 和过滤器filter
  7. 请求速率限制
  8. 路由的路径重写

那么我为什么需要使用gateway网关呢?

主要原因是在开发恋爱话术服务和之前的毕设项目服务对应的小程序时,为了方便使用同一个https安全域名,所以把两个功能的代码写在一个项目里面,导致每次修改一个功能时会影响另一个服务的使用,没有达到微服务各司其职的理念,所以打算通过使用gateway网关来对项目进行一个重构,最终实现一个域名根据路由分别转发到不同的后端服务上。

2、创建Gateway项目

2.1 在idea上新建一个springboot项目

还不知道微服务的入口?快看这里,手把手实战网关组件Gateway,一发入魂~_第1张图片

2.2 选择相关参数后点击下一步

还不知道微服务的入口?快看这里,手把手实战网关组件Gateway,一发入魂~_第2张图片

2.3 勾选依赖

还不知道微服务的入口?快看这里,手把手实战网关组件Gateway,一发入魂~_第3张图片

2.4 完整的项目结构如下,然后咱们新建一个yml文件

还不知道微服务的入口?快看这里,手把手实战网关组件Gateway,一发入魂~_第4张图片
这个是完整的pom.xml文件


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.6.6version>
        <relativePath/> 
    parent>
    <groupId>com.yinfenggroupId>
    <artifactId>gatewayartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>gatewayname>
    <description>gatewaydescription>
    <properties>
        <java.version>1.8java.version>
        <spring-cloud.version>2021.0.1spring-cloud.version>
    properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-gatewayartifactId>
        dependency>

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${spring-cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombokgroupId>
                            <artifactId>lombokartifactId>
                        exclude>
                    excludes>
                configuration>
            plugin>
        plugins>
    build>

project>

3、配置转发规则

在咱们之前新建的yml文件中进行配置

spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: test
          # 转发的地址
          uri: http://127.0.0.1:8888
          predicates:
            # 配置url路径匹配规则
            - Path=/test/**
server:
  port: 8081

4、测试一下

先启动一个后端服务test

还不知道微服务的入口?快看这里,手把手实战网关组件Gateway,一发入魂~_第5张图片
还不知道微服务的入口?快看这里,手把手实战网关组件Gateway,一发入魂~_第6张图片

在启动gateway网关服务
还不知道微服务的入口?快看这里,手把手实战网关组件Gateway,一发入魂~_第7张图片
通过PostMan访问咱们网关域名和test的路由

还不知道微服务的入口?快看这里,手把手实战网关组件Gateway,一发入魂~_第8张图片

可以看到我们的请求能正常转发到test服务的接口上,也收到了接口的响应,最终完成了咱们的目标。

5、总结

外出打工不易,希望各位兄弟找到自己心仪的工作,虎年发发发! 也希望兄弟们能关注、点赞、收藏、评论支持一波,非常感谢大家!

你可能感兴趣的:(springboot企业级实战,java,微服务,gateway,spring,boot,分布式)