Spring Gateway学习

系列文章目录

JavaSE
基础知识、数据类型学习 万年历项目 代码逻辑训练习题
代码逻辑训练习题 方法、数组学习 图书管理系统项目
面向对象编程:封装、继承、多态学习 封装继承多态习题 常用类、包装类、异常处理机制学习
集合学习 IO流、多线程学习 仓库管理系统JavaSE项目
员工管理系统、多表查询、反射实现DBHelper学习 DML、DDL、数据库对象学习
JavaWeb
网络编程、各种标签、CSS学习 ECMAScript、BOM学习 DOM、jQuery学习
Servlet、JSP、Cookie、Ajax学习 融资管理系统JavaWeb项目
框架
MyBatis框架学习 逆向工程、Spring框架IOC、AOP学习 SpringMVC框架学习
SpringBoot框架学习 招聘网站框架项目 Vue介绍、窗体内操作、窗体间操作学习
Vue路由配置、网络请求访问框架项目、element组件介绍学习 标准管理系统Vue项目
微服务
Linux安装、Nginx反向代理、负载均衡学习 Docker学习 Jenkins学习
Nexus学习 Spring Security学习 RabbitMQ学习
Redis学习 MongoDB学习 MongoDB学习
Nacos学习 Spring Session学习 Spring Gateway学习
JSR 303学习 OpenFeign学习 Hystrix学习

文章目录

  • 系列文章目录
  • 前言
  • [一、Spring Gateway介绍](#一、Spring Gateway介绍)
  • [二、设置Spring Gateway](#二、设置Spring Gateway)
    • [1. 启动Nacos](#1. 启动Nacos)
    • [2. 创建Maven项目](#2. 创建Maven项目)
    • [3. 添加依赖](#3. 添加依赖)
    • [4. 编写bootstrap.yml配置文件](#4. 编写bootstrap.yml配置文件)
    • [5. 编写application.properties配置文件](#5. 编写application.properties配置文件)
    • [6. 编写SpringBootMain文件](#6. 编写SpringBootMain文件)
    • [7. 启动后,访问Nacos](#7. 启动后,访问Nacos)
  • 三、网关配置
    • [1. 注释依赖](#1. 注释依赖)
    • [2. 添加依赖](#2. 添加依赖)
    • [2. 添加application.yml配置文件](#2. 添加application.yml配置文件)
    • [3. 运行项目,访问百度](#3. 运行项目,访问百度)
  • 总结

前言

本文我们要讲述:

Spring Gateway

在下攸攸太上,我要给你们介绍Spring Gateway。


一、Spring Gateway介绍

Spring Session是一个具有路由、断言和过滤器等核心功能的框架。它用于设置转发地址、判断真实应该请求什么地址,以及过滤地址和处理参数。

网关是后台服务的统一入口,类似于网络中的网关。在微服务架构中,网关是必备的服务,它提供统一的入口,解决跨域、负载均衡、微服务通信等问题,实现整体管理和通信。

使用网关的主要目的是实现请求转发。在没有网关的情况下,前端需要知道每个微服务的IP地址和端口才能发送请求,这样前端需要管理大量的微服务。此外,前端无法进行负载均衡,无法确定请求应该发送到哪个微服务实例。通过使用网关,前端只需要知道网关的地址,然后通过反向代理将请求转发给网关。网关在内部通过集成负载均衡器来选择合适的微服务实例处理请求。

对于前端来说,发送的请求不是直接到网关的地址,而是通过Nginx等反向代理到达网关。这样,前端只需要知道反向代理服务器(如Nginx)的地址,而不需要直接暴露网关的地址。

一般情况下,网关会作为一个独立的微服务存在,为了实现请求转发和整体管理。通过使用网关,可以简化前端的工作,实现负载均衡,提高系统的可扩展性和管理性。

二、设置Spring Gateway

1. 启动Nacos

复制代码
docker start nacos

2. 创建Maven项目

3. 添加依赖

html 复制代码
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.7.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
        <jwt.version>0.7.0</jwt.version>
        <fastjson.version>1.2.60</fastjson.version>
        <spring-cloud-alibaba.version>2.0.3.RELEASE</spring-cloud-alibaba.version>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>

4. 编写bootstrap.yml配置文件

java 复制代码
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.219.186:8848
      config:
        server-addr: 192.168.219.186:8848

    inetutils:
      preferred-networks: 192.168.56

server-addr代表自己的虚拟机地址

5. 编写application.properties配置文件

注意不要有空格、注释啥的

java 复制代码
spring.application.name=gateway
server.port=300

6. 编写SpringBootMain文件

java 复制代码
package com.jjy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootMain {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootMain.class,args);
    }
}

7. 启动后,访问Nacos

在服务管理的服务列表下能看到本项目的服务

三、网关配置

1. 注释依赖

html 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2. 添加依赖

html 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

2. 添加application.yml配置文件

java 复制代码
spring:
  cloud:
    gateway:
      routes:
        - id: baidu_route
          uri: https://www.baidu.com
          predicates:
            - Query=baidu

3. 运行项目,访问百度

访问如下地址才能跳转百度http://localhost:300/baidu?baidu,后面的baidu代表Query=baidu,这个baidu可以写成别的然后网址问号后面写别的就可以

直接访问http://localhost:300/baidu无法访问,我已经吃过一次好奇心的亏了,你们不要去吃


总结

本文讲述了:

Spring Gateway:用于转发

在下攸攸太上,最近疯狂发文章,只是为了得到一周九篇才能拿到的劳模勋章,距离劳模勋章还差0篇!呜呼!!

相关推荐
mochensage8 分钟前
C++信息学竞赛中常用函数的一般用法
java·c++·算法
烛阴12 分钟前
bignumber.js深度解析:驾驭任意精度计算的终极武器
前端·javascript·后端
计蒙不吃鱼20 分钟前
一篇文章实现Android图片拼接并保存至相册
android·java·前端
服务端技术栈31 分钟前
电商营销系统中的幂等性设计:从抽奖积分发放谈起
后端
小海编码日记35 分钟前
Java八股-JVM & GC
java
全职计算机毕业设计41 分钟前
基于Java Web的校园失物招领平台设计与实现
java·开发语言·前端
东阳马生架构1 小时前
商品中心—1.B端建品和C端缓存的技术文档
java
Chan161 小时前
【 SpringCloud | 微服务 MQ基础 】
java·spring·spring cloud·微服务·云原生·rabbitmq
恰薯条的屑海鸥1 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十五期-URL重定向模块)
学习·安全·web安全·渗透测试·网络安全学习
LucianaiB1 小时前
如何做好一份优秀的技术文档:专业指南与最佳实践
android·java·数据库