系列文章目录

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

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

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

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

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

二、设置Spring Gateway

1. 启动Nacos

docker start nacos

在这里插入图片描述

2. 创建Maven项目

在这里插入图片描述

3. 添加依赖

    <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配置文件

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配置文件

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

spring.application.name=gateway
server.port=300

6. 编写SpringBootMain文件

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. 注释依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

2. 添加依赖

        <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配置文件

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

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部