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篇!呜呼!!

相关推荐
侠客行03177 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪7 小时前
深入浅出LangChain4J
java·langchain·llm
Victor3567 小时前
https://editor.csdn.net/md/?articleId=139321571&spm=1011.2415.3001.9698
后端
Victor3567 小时前
Hibernate(89)如何在压力测试中使用Hibernate?
后端
灰子学技术9 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
老毛肚9 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
阿蒙Amon9 小时前
TypeScript学习-第10章:模块与命名空间
学习·ubuntu·typescript
AI绘画哇哒哒9 小时前
【干货收藏】深度解析AI Agent框架:设计原理+主流选型+项目实操,一站式学习指南
人工智能·学习·ai·程序员·大模型·产品经理·转行
风流倜傥唐伯虎9 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Yvonne爱编码9 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python