当前位置: 首页 > news >正文

【微服务】SpringCloudGateway网关

目录

✅需求的产生

✅什么是网关?

 ✅快速入门

✅创建新版块

✅引入网关依赖

✅编写启动类         

✅配置路由规则

✅测试

✅总结


✅需求的产生

上篇文章 【SpringCloud】微服务的治理以及服务间的远程调用-CSDN博客 我们认识了什么是微服务以及微服务架构的优点,但是基于上篇文章我们可以发现服务拆分后将会面临两个问题:

  ▪  服务地址过多,而且将来可能变化,前端不知道该请求谁.

  ▪  每个服务可能都需要用户登录信息,若每个微服务都做登录校验,不仅麻烦,而且还会有秘钥泄漏的风险。

所以就需要想办法解决这些问题,于是就引出了我们今天的主角—网关!

✅什么是网关?

网关就是网络的关口,负责请求的路由、转发、身份校验

更通俗的来讲,网关就像是以前园区传达室的大爷,而每个微服务就像小区里的住户:

  • 外面的人要想进入小区,必须经过大爷的认可,如果你是不怀好意的人,肯定被直接拦截。

  • 外面的人要传话或送信,要找大爷。大爷帮你带给目标人。

微服务网关就起到同样的作用,前端请求不能直接访问微服务,而是要请求网关:

  • 网关可以做安全控制,也就是登录身份校验,校验通过才放行。

  • 通过认证后,网关再根据请求判断应该访问哪个微服务,将请求转发过去。

 ✅快速入门

SpringCloudGateWay官网地址:

官方文档https://spring.io/projects/spring-cloud-gateway/#learnhttps://spring.io/projects/spring-cloud-gateway/#learnhttps://spring.io/projects/spring-cloud-gateway/#learn选择SpringCloudGateway的优势:

它基于 响应式编程模型(Reactive,使用 Project Reactor 和 WebFlux),支持非阻塞 I/O,适合高并发场景。

创建新版块

新创建一个Module作为网关微服务:

 

引入网关依赖

在 hm-gateway模块的 pom.xml文件中引入依赖:

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>hmall</artifactId>
        <groupId>com.heima</groupId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>hm-gateway</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <!--common-->
        <dependency>
            <groupId>com.heima</groupId>
            <artifactId>hm-common</artifactId>
            <version>1.0.0</version>
        </dependency>
        <!--网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--nacos discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--负载均衡-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
    </dependencies>
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

 

编写启动类         

代码如下:

package com.hmall.gateway;

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

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

 

配置路由规则

接下来,在 hm-gateway模块的 resources目录新建一个 application.yaml文件,内容如下:

server:
  port: 8080
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: 192.168.31.128:8848 #自己的虚拟机地址
    gateway:
      routes:
        - id: item # 路由规则id,自定义,唯一
          uri: lb://item-service # 路由的目标服务,lb代表负载均衡,会从注册中心拉取服务列表
          predicates: # 路由断言,判断当前请求是否符合当前规则,符合则路由到目标服务
            - Path=/items/**,/search/** # 这里是以请求路径作为判断规则
        - id: cart
          uri: lb://cart-service
          predicates:
            - Path=/carts/**
        - id: user
          uri: lb://user-service
          predicates:
            - Path=/users/**,/addresses/**
        - id: trade
          uri: lb://trade-service
          predicates:
            - Path=/orders/**
        - id: pay
          uri: lb://pay-service
          predicates:
            - Path=/pay-orders/**

✅测试

启动GatewayApplication,在nacos中检查是否注册信息,以 http://localhost:8080 拼接微服务接口路径来测试:

✅总结

有了网关以后,我们的微服务地址再也不需要暴露给前端了,我们暴露给前端的仅仅是网关地址,这对于我们的微服务来讲也是一种保护,而且对于前端来讲,由于只知道网关地址,因此整个微服务对于它来讲是隐藏的,是个黑盒的,在前端看来后端和以前的单体架构其实是没什么区别的,使得开发体验一致,所以网关已经成为现在微服务开发必不可少的组件了! 



 是结局,亦是开始!

相关文章:

  • 【开源宝藏】30天学会CSS - DAY8 第八课 跳动的爱心动画
  • 嵌入式八股文学习——基类构造与析构、成员初始化及继承特性详解
  • RAG核心概念
  • 蓝桥杯备考:差分数组+贪心Tallest Cow S
  • uv:Rust 驱动的 Python 包管理新时代
  • 里氏替换原则
  • SQL-查询漏洞
  • 通过国内源在Ubuntu20.0.4安装repo
  • 【时时三省】(C语言基础)用if语句实现选择结构
  • 多层感知机实现
  • Qt 线程类
  • 在普通用户下修改root用户密码
  • python中闭包与装饰器
  • DeepSeek助力Vue开发:打造丝滑的键盘快捷键
  • 使用 LLaMA-Factory 微调 llama3 模型
  • LeetCode热题100JS(74/100)第十四天|155|394|739|84|215
  • 【网络安全 | 漏洞挖掘】绕过管理员权限撤销的访问控制漏洞
  • Walrus 基金会完成 1.4 亿美元融资,由 Standard Crypto 领投
  • aab 转 apk
  • 笔试面试01 c/c++
  • 网站建设与维护 排序题/推广app的平台
  • 辽宁营销型网站建设/短视频代运营合作方案
  • 网站架构 seo/seo关键词排名工具
  • 网站网页/搜索引擎官网
  • 黑龙江电商网站建设/朋友圈广告推广代理
  • 南江移动网站建设/永久免费个人网站注册