SpringCloud(九)GateWay服务网关

2023-05-16

文章目录

    • 1、概述简介
      • 1、官网
      • 2、是什么
      • 3、能干嘛
      • 4、微服务架构中网关在哪里
      • 5、有Zuul了怎么有出来gateway
    • 2、三大核心概念
    • 3、Gateway工作流程
    • 4、入门配置
      • 1、新建Module
      • 2、POM文件
      • 3、YML
      • 4、主启动类
      • 5、9527网关如何做路由映射呢?
      • 6、测试
      • 7、YML配置说明
    • 5、通过微服务名实现动态路由(Route)
    • 6、Predicate(断言)的使用
      • 常见的Route Predicate
    • 7、Filter(过滤)的使用


1、概述简介

1、官网

上一代zuul 1.X:https://github.com/Netflix/zuul/wiki

当前gateway:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/

2、是什么

Cloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuu|网关;
但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关替代Zuul,那就是SpringCloud Gateway换一句话:gateway是原zuul1.x版的替代。

在这里插入图片描述

Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和Project Reactor等技术。

Gateway旨在提供一种简单而有效的方式来对API进行路由,提供一些强大的过滤器功能,例如:熔断、限流、重试等。

在这里插入图片描述

SpringCloud Gateway是Spring Cloud的一个全新项目,基于Spring 5.0 + Spring Boot 2.0和Project Reactor等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式

SpringCloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 1.x非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。

Spring Cloud Gateway的目标提供统一的路由方式且基于Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。

一句话总结:SpringCloud Gateway 使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架。

源码架构:

在这里插入图片描述

3、能干嘛

  • 反向代理
  • 鉴权
  • 流量控制
  • 熔断
  • 日志监控等

4、微服务架构中网关在哪里

在这里插入图片描述

5、有Zuul了怎么有出来gateway

我们为什么选择Gateway?

  1. neflix不太靠谱,zuul2.0一直跳票,迟迟不发布

一方面因为Zuu1.0已经进入了维护阶段,且Gateway是Spring Cloud团队研发的, 新儿子产品,值得信赖。而且很多功能Zuul都没有用起来也非常的简单便捷。
Gateway是基于异步非阻塞模型上进行开发的,性能方面不需要担心。虽然Netflix早就发布了最新的Zuul 2.x,但Spring Cloud貌似没有整合计划。而且Netflix相关组件都宣布进入维护期;不知前景如何?多方面综合考虑Gateway是很理想的网关选择。

  1. SpringCloud Gateway具有如下特性
  • 基于Spring Framework 5,Project Reactor和Spring Boot 2.0进行构建;
  • 动态路由:能够匹配任何请求属性;
  • 可以对路由指定Predicate(断言)和Filter(过滤器);
  • 集成Hystrix的断路器功能;
  • 集成Spring Cloud服务发现功能;
  • 易于编写的Predicate (断言)和Filter (过滤器) ;
  • 请求限流功能;
  • 支持路径重写。
  1. SpringCloud Gateway与Zuul的区别

在SpringCloud Finchley正式版之前,Spring Cloud推荐的网关是Netflix提供的Zuul:

  • Zuul 1.x,是一个基于阻塞I/O的API Gateway
  • Zuul 1.x基于Servlet 2. 5使用阻塞架构它不支持任何长连接(如WebSocket) Zuul的设计模式和Nginx较像,每次I/O操作都是从工作线程中选择一个执行,请求线程被阻塞到工作线程完成,但是差别是Nginx用C++实现,Zuul 用Java实现,而JVM本身会有第一次加载较慢的情况,使得Zuul的性能相对较差。
  • Zuul 2.x理念更先进,想基于Netty非阻塞和支持长连接,但SpringCloud目前还没有整合。Zuul 2.x的性能较Zuul 1.x有较大提升。在性能方面,根据官方提供的基准测试,Spring Cloud Gateway的RPS(每秒请求数)是Zuul的1. 6倍。
  • Spring Cloud Gateway建立在Spring Framework 5、Project Reactor和Spring Boot2之上,使用非阻塞 API。
  • Spring Cloud Gateway还支持WebSocket,并且与Spring紧密集成拥有更好的开发体验。

2、三大核心概念

Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由。

Predicate(断言):参考的是Java8的java.util.funlction.Predicate,开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由

Filter(过滤):指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。

3、Gateway工作流程

在这里插入图片描述
客户端向Spring Cloud Gateway发出请求。然后在Gateway Handler Mapping中找到与请求相匹配的路由,将其发送到Gateway Web Handler。

Handler再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。
过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前( “pre” )或之后( “post” )执行业务逻辑。

Filter在"pre" 类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,
在"post" 类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。

核心逻辑:路由转发+执行过滤器链

4、入门配置

1、新建Module

cloud-gateway-gateway9527

2、POM文件

<!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
    <groupId>com.kuang</groupId>
    <artifactId>cloud-api-commons</artifactId>
    <version>${project.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--eureka client-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--热部署-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

3、YML

server:
  port: 9527

spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
#      discovery:
#        locator:
#          enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称进行路由
      routes:
        - id: payment_route # 路由的id,没有规定规则但要求唯一,建议配合服务名
          #匹配后提供服务的路由地址
          uri: http://localhost:8001
          #uri: lb://cloud-payment-service
          predicates:
            - Path=/payment/get/** # 断言,路径相匹配的进行路由

        - id: payment_route2
          uri: http://localhost:8001
          #uri: lb://cloud-payment-service
          predicates:
            - Path=/payment/lb/** #断言,路径相匹配的进行路由
            - After=2020-03-12T15:44:15.064+08:00[Asia/Shanghai]
          #- Cookie=username,eiletxie   #带Cookie,并且username的值为eiletxie
          #- Header=X-Request-Id,\d+ #请求头要有 X-Request-Id属性并且值为整数的正则表达式

eureka:
  instance:
    hostname: cloud-gateway-service
  client:
    fetch-registry: true
    register-with-eureka: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/

4、主启动类

@SpringBootApplication
@EnableEurekaClient
public class GatewayMain9527 {

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

5、9527网关如何做路由映射呢?

cloud-provider-payment8001看看controller的访问地址:get,lb

我们目前不想暴露8001端口,希望8001外面套一层9527

6、测试

启动7001,启动8001(cloud-provider-payment8001),启动9527网关

访问说明:

  • 访问网关前:http://localhost:8001/payment/get/1
  • 访问网关后:http://localhost:9527/payment/get/1

7、YML配置说明

Gateway网关路由有两种配置方式:

  • 在配置文件yml中配置
  • 代码中标注入RouteLocator的Bean
    官网案例:
    在这里插入图片描述
    我们自己写一个,业务需求:通过9527网关访问到外网的百度新闻地址
@Configuration
public class GatewayConfig {

    /**
     * 配置一个id为route-name的路由规则,
     * 当访问地址 http://localhost:9527/guoni时会自动转发到地址:http://news.baidu.com/guonei
     * @param routeLocatorBuilder
     * @return
     */
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder){
        RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();

        routes.route("path_route_kuang",r -> r.path("/guonei")
                .uri("http://news.baidu.com/guonei")).build();

        return routes.build();
    }

    @Bean
    public RouteLocator customRouteLocator2(RouteLocatorBuilder routeLocatorBuilder){
        RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();

        routes.route("path_route_kuang2",r -> r.path("/guoji")
                .uri("http://news.baidu.com/guoji")).build();

        return routes.build();
    }
}

访问:http://localhost:9527/guonei

5、通过微服务名实现动态路由(Route)

默认情况下Gateway会根据注册中心注册的服务列表,以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能

启动: 一个eurka7001 + 两个服务提供者8001/8002

修改yml配置文件:

spring:
  application:
    name: cloud-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true # 开启从注册中心动态创建路由的功能,利用微服务名称进行路由
      routes:
        - id: payment_route # 路由的id,没有规定规则但要求唯一,建议配合服务名
          #匹配后提供服务的路由地址
          #uri: http://localhost:8001
          uri: lb://cloud-payment-service
          predicates:
            - Path=/payment/get/** # 断言,路径相匹配的进行路由

        - id: payment_route2
          #uri: http://localhost:8001
          uri: lb://cloud-payment-service
          predicates:
            - Path=/payment/lb/** #断言,路径相匹配的进行路由
            - After=2020-03-12T15:44:15.064+08:00[Asia/Shanghai]
          #- Cookie=username,eiletxie   #带Cookie,并且username的值为eiletxie
          #- Header=X-Request-Id,\d+ #请求头要有 X-Request-Id属性并且值为整数的正则表达式

需要注意的是uri的协议为lb,表示启用Gateway的负载均衡功能
lb://serviceName是spring cloud gateway在微服务中自动为我们创建的负载均衡uri

测试:http://localhost:9527/payment/lb,实现了8001/8002两个端口切换

6、Predicate(断言)的使用

启动我们的gateway9527,可以看到控制台如下:

在这里插入图片描述
Route Predicate Factories这个是什么?

查看官网我们可以知道如下:
在这里插入图片描述
Spring Cloud Gateway 将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。
Spring Cloud Gateway包括许多内置的Route Predicate 工厂。所有这些Predicate都与HTTP请求的不同属性匹配。多个Route Predicate工厂可以进行组合

Spring Cloud Gateway创建Route 对象时,使用RoutePredicateFactory创建Predicate对象,Predicate对象可以赋值给Route。Spring Cloud Gateway 包含许多内置的Route Predicate Factories。

所有这些谓词都匹配HTTP请求的不同属性。多种谓词工厂可以组合,并通过逻辑and。

常见的Route Predicate

1. After Route Predicate
在这里插入图片描述
官网给我们提供的是美国时间,我们需要换成中国的时间,使用Java8中的方法如下:

public class T2 {
    public static void main(String[] args) {
        ZonedDateTime zbj = ZonedDateTime.now(); // 默认时区
        System.out.println(zbj);
        //2020-03-12T15:44:15.064+08:00[Asia/Shanghai]
    }
}

如果我们配置的时间还没有到,那么我们去访问的时候会报如下的错误:
在这里插入图片描述

2. Before Route Predicate

- Before=2020-03-12T15:44:15.064+08:00[Asia/Shanghai]

3. Between Route Predicate

- Between=2020-03-12T15:44:15.064+08:00[Asia/Shanghai],2020-04-12T15:44:15.064+08:00[Asia/Shanghai]

4. Cookie Route Predicate
在这里插入图片描述
Cookie Route Predicate需要两个参数,一个是 Cookie name,一个是正则表达式。

路由规则会通过获取对应的Cookie name 值和正则表达式去匹配,如果匹配上就会执行路由,如果没有匹配上就不执行。

这里我们使用curl来发post或get请求做微服务的测试:

不带cookie的访问:curl http://localhost:9527/payment/lb

在这里插入图片描述
带cookie访问:curl http://localhost:9527/payment/lb --cookie "username=zzyy"

在这里插入图片描述

5. Header Route Predicate
在这里插入图片描述
两个参数:一个是属性名称和一个正则表达式,这个属性值和正则表达式匹配执行。

测试:curl http://localhost:9527/payment/lb -H "X-Request-Id:123"

在这里插入图片描述
6. Host Route Predicate

在这里插入图片描述
Host Route Predicate 接收一组参数,一组匹配的域名列表,这个模板是一个ant 分隔的模板,用.号作为分隔符。
它通过参数中的主机地址作为匹配规则。

测试:curl http://localhost:9527/payment/lb -H "Host:www.atguigu.com"

7. Method Route Predicate

在这里插入图片描述
8. Path Route Predicate

9. Query Route Predicate

在这里插入图片描述
支持传入两个参数,一个是属性名,一个是属性值,属性值可以是正则表达式。

测试:http://localhost:9527/payment/lb?username=31

7、Filter(过滤)的使用

定义:路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。

Spring Cloud Gateway内置了很多路由过滤器,他们都由GatewayFilter的工厂类来产生。

Gateway的Filter分为两种:

  • GateFilter
  • GlobalFilter

具体使用查看官网 5,6大点。

自定一全局GlobalFilter

实现 implements GlobalFilter, Ordered接口

@Component
@Slf4j
public class MyLogGatewayFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("****come in MyLogGatewayFilter:" + new Date());
        String uname = exchange.getRequest().getQueryParams().getFirst("uname");
        if (uname == null) {
            log.info("****用户名为null,非法用户");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return  exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return 0;
    }
}

测试:http://localhost:9527/payment/lb?uname=z3


如果有收获!!! 希望老铁们来个三连,点赞、收藏、转发。
创作不易,别忘点个赞,可以让更多的人看到这篇文章,顺便鼓励我写出更好的博客
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringCloud(九)GateWay服务网关 的相关文章

  • Spring-服务被eureka服务器发现后关闭

    我的服务 应用程序名称 在启动后立即意外关闭 当时 eureka服务器运行在8761端口 服务已成功被eureka服务器发现 注册状态 204 registering application with eureka with status
  • 为 Spring Cloud Gateway 配置 CORS 策略

    我在单独的服务器上运行 Spring Cloud 网关 配置如下 spring cloud gateway globalcors cors configurations I also tried allowedOrigins http lo
  • Spring Cloud Feign 客户端重复列表值

    我有这个接口使用 Spring cloud Feign 映射我的其余客户端 FeignClient url http localhost 8080 public interface RestClient RequestMapping val
  • Spring Boot 日志中缺少应用程序名称

    例如 人们通常会得到这样的内容 my service id 是应用程序名称 2016 02 11 17 12 45 404 INFO my service id 85184 nio 8080 exec 1 com example MySim
  • Spring Cloud Contract 从 Artifactory 检索存根时出现问题

    我对两个消费者和一个生产者进行了离线工作正常的测试 但是当我更改它们以从 Artifactory 检索存根时 消费者测试失败 这是离线工作的代码 RunWith SpringRunner class SpringBootTest class
  • Feign 客户端中不支持 Spring Data Pageable 作为 RequestParam

    我一直在尝试为我的其余 api 公开一个 Feign Client 它采用 Pageable 作为输入并定义了 PageDefaults 控制器 GetMapping value data produces MediaType APPLIC
  • 如何在Azure云上部署Spring Cloud微服务

    我正在使用 Spring Cloud 和 Netflix Eureka 进行微服务开发 现在我想在Azure上部署这些微服务 我试着遵循这个Link https azure microsoft com en in documentation
  • Eureka检测服务状态

    Context 我们使用 Spring Cloud Netflix 和 Eureka 作为服务发现 使用 Zuul 来代理服务并对其进行负载平衡 微服务使用NodeJS实现 并使用NPM模块注册到Eurekaeureka js 客户端 ht
  • 用于拒绝请求的 NetflixOSS Zuul 过滤器

    我正在尝试在简单的 spring cloud Netflix Api 网关 反向代理 中使用 ZuulFilter 以便对自定义身份验证提供程序进行请求身份验证 通过 Rest 调用 过滤器应使用 401 拒绝未经授权的请求 并且不要将这些
  • 使用 ECS 时保护来自 EC2 实例的出站流量规则

    即使我在私有子网中创建 EC2 实例 如果我想将它们注册到 ECS 集群 它们也必须能够将流量发送到 Internet 我正在使用 NAT 网关来执行此操作 但我仍然感到不安全 因为实例可以在被接管时将私人信息发送到任何地方 我可以用于实例
  • 使用 Spring Boot 和 Netflix Zuul 的简单反向代理

    我正在寻找使用 Spring Boot 实现一个简单的反向代理 即 轻松添加路线 能够在每个路由的基础上添加自定义身份验证 根据需要添加其他标头 我查看了提供的设施 EnableZuulProxy注释 但它似乎太重量级了 因为我不想使用 E
  • Zuul 调用的基本身份验证服务

    我是 Zuul 作为边缘服务器 所以所有请求都经过此边缘服务器 我有一个微服务A A的所有Web服务都受到基本身份验证的保护 我们如何通过Zuul代理来调用A b 的服务呢 我应该为消息添加标头吗 这是我的 Zuul 过滤器 public
  • HTTP代理、隧道、网关有什么区别? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 全部 我看到 RFC 2616 中的条款 http www w3 org Protocols rfc2616 rfc2616 sec1 html se
  • 将 SpringCloudSleuth 与 AWS X-Ray 集成

    我有一个使用 Springboot 应用程序运行 Fargate 实例的 ECS 集群 并且希望以最少的代码更改来启用跟踪 我开始研究两种方法 使用 AWS Xray 步骤 gt 添加依赖项 添加 WSXRayServletFilter 在
  • Spring Cloud Zuul 在实例关闭时重试并转发到其他可用实例

    使用 Camden SR5 作为 spring cloud 依赖项 并使用 spring boot 1 5 2 RELEASE 在我当前的设置中 我有 尤里卡服务器 配置服务器 在随机端口上运行 zuul网关服务器 和 2 个服务实例 在随
  • 自定义Zuul异常

    我在 Zuul 中有一个场景 其中 URL 路由的服务也可能已关闭 因此 响应正文会在 JSON 正文响应中抛出 500 HTTP Status 和 ZuulException timestamp 1459973637928 status
  • 在随机端口上运行微服务时,Eureka 无法找到端口

    我在 Spring Boot 应用程序中使用 eureka 进行服务发现 使用功能区进行负载平衡 当我在修复端口上运行在 eureka 注册的微服务时 它工作正常 但是当我在随机端口上运行它们时 尽管我可以看到在 eureka 仪表板上注册
  • Spring Cloud Docker - 配置服务器无法获取属性文件作为文件后端的使用

    我在获取全部内容时遇到问题特性文件来自配置服务器 in my 春季云示例 我已经和它一起工作过Docker 我只获取了 4 个属性文件 广告服务 用户服务 API网关 报表服务 而其他属性文件 eureka服务器和管理服务 无法从配置服务器
  • Spring Cloud 配置服务器无法使用本地属性文件

    我一直在玩弄位于此处的 github 上的 Spring Cloud 项目 https github com spring cloud spring cloud config https github com spring cloud sp
  • 如何通过基本身份验证确保 Spring Cloud Eureka 服务的安全?

    我在同一主机上设置了多个尤里卡服务器实例 他们使用主机名 eureka primary secondary 和 tertiary 这些主机名在主机文件中定义为 localhost 别名 一切都工作正常 它们都是可见的 并且可以作为不同的实例

随机推荐

  • IDEA连接mysql又报错!Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezone‘

    错误界面 IDEA连接mysql xff0c 地址 xff0c 用户名 xff0c 密码 xff0c 数据库名 xff0c 全都配置好了 xff0c 点测试连接 xff0c 咔 xff01 不成功 xff01 界面是这样的 xff0c 翻译
  • 《阿里云服务器搭建》------ 安装maven

    一 下载压缩包 http maven apache org download cgi 或者百度网盘链接 xff1a https pan baidu com s 1A7bkSGomTrPLtYFq3t5WzQ 提取码 xff1a nro9 二
  • 《阿里云服务器搭建》------ 安装docker

    到docker官网找到对应环境的安装方式如 xff1a https docs docker com engine install centos 1 卸载掉旧版本 yum remove docker span class token punc
  • VM中安装Centos6.8详细步骤(图文)

    目录 1 检查BIOS虚拟化支持2 新建虚拟机3 新建虚拟机向导4 创建虚拟空白光盘5 安装Linux系统对应的CentOS版6 虚拟机命名和定位磁盘位置7 处理器配置 xff0c 看自己是否是双核 多核8 设置内存为2GB9 选择IO控制
  • Ubuntu18:使用CMake-gui编译OpenCV3源码的详细过程

    目录 一 卸载原来的opencv 二 准备工作 三 编译过程 四 测试过程 由于之前安装的OpenCV4与我的代码有多处不兼容 xff0c 所以要重新装一个OpenCV3 xff0c 顺便记录一下过程吧 OpenCV版本 xff1a ope
  • 基于音形码的中文字符串相似度算法(转)

    转自 https blog csdn net chndata article details 41114771 字符串相似度算法是指通过一定的方法 xff0c 来计算两个不同字符串之间的相似程度 通常会用一个百分比来衡量字符串之间的相似程度
  • VMware15中安装Centos7详细步骤(图文)

    文章目录 1 检查虚拟化是否开启2 新建虚拟机3 新建虚拟机向导4 创建虚拟空白光盘5 安装Linux系统对应的CentOS版6 虚拟机命名和定位磁盘位置7 处理器配置 xff0c 看自己是否是双核 多核8 设置内存为2GB9 选择IO控制
  • 设置CentOS7的网卡开机自启动

    1 可以试试这条命令 xff1a CentOS7的网卡开机启动应该是 xff1a systemctl enable network 2 若设置了始终还没有开机启动网络服务 xff0c 最好只好去改配置文件 vim etc sysconfig
  • 谷粒商城 - 架构图

    商城项目地址 xff1a 后端项目源码 xff1a https gitee com StarSea007 gulimall parent 前端项目源码 xff1a https gitee com StarSea007 gulimall vu
  • 牛客网经典120道Java面试常见题(试题+答案)

    牛客网提供了120道Java面试题 xff0c 这里整理出重点的内容 xff0c 而且对答案有疑惑 xff0c 补充了解释内容 xff0c 便于理解 1 什么是Java虚拟机 xff1f 为什么Java被称作是 平台无关的编程语言 xff1
  • Redis面试题(2021最新)

    文章目录 概述什么是RedisRedis有哪些优缺点为什么要用 Redis 为什么要用缓存 为什么要用 Redis 而不用 map guava 做缓存 Redis为什么这么快 数据类型Redis有哪些数据类型Redis的应用场景 持久化什么
  • Java基础知识面试题(2021最新)

    文章目录 1 Java概述什么是Javajdk1 5之后的三大版本JVM JRE和JDK的关系什么是跨平台性 xff1f 原理是什么 xff1f Java语言有哪些特点什么是字节码 xff1f 采用字节码的好处是什么 什么是Java程序的主
  • vagrant up下载centos7慢的解决办法

    安装完vagrant后 执行命令 vagrant init centos 7 进行初始化 会出现一个Vagrantfile文件 然后执行 vagrant up 命令下载centos 7会很慢 将红线里的地址复制到浏览器 xff0c 通过浏览
  • SpringCloud Alibaba 全部组件说明

    文章目录 一 微服务1 系统架构的演变1 xff09 单体应用架构2 xff09 垂直应用架构3 xff09 分布式架构4 xff09 SOA架构5 xff09 微服务架构 2 微服务架构常见的问题3 常见微服务架构 二 SpringClo
  • 前后端分离项目解决跨域问题

    1 跨域概念 跨域 xff1a 指的是浏览器不能执行其他网站的脚本 它是由浏览器的同源策略造成的 xff0c 是 浏览器对javascript施加的安全限制 同源策略 xff1a 是指协议 xff0c 域名 xff0c 端口都要相同 xff
  • ElasticSearch 入门检索的语法和实例【图文】

    文章目录 简介一 基本概念1 Index 索引 2 Type 类型 3 Document 文档 4 倒排索引 二 Docker安装 Es1 下载镜像文件2 创建实例 三 初步检索1 CAT2 索引一个文档 xff08 保存 xff09 3
  • 使用VSCode对libtorch有关的代码cmake时报错:fatal error: torch/script.h: No such file or directory

    最近在Ubuntu上做用libtorch部署深度学习网络的工作 使用IDE是VSCode xff0c 并用cmake进行编译 xff0c 在写demo过程中莫名地出现了如题所示的bug卡了两天 xff0c 今天突然发现问题所在T T xff
  • ConcurrentHashMap实现原理及源码分析

    ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现 xff08 若对HashMap的实现原理还不甚了解 xff0c 可参考我的另一篇文章 HashMap实现原理及源码分析 xff09 xff0c
  • 如何保障mysql和redis之间的数据一致性?

    需求起因 在高并发的业务场景下 xff0c 数据库大多数情况都是用户并发访问最薄弱的环节 所以 xff0c 就需要使用redis做一个缓冲操作 xff0c 让请求先访问到redis xff0c 而不是直接访问MySQL等数据库 这个业务场景
  • SpringCloud(九)GateWay服务网关

    文章目录 1 概述简介1 官网2 是什么3 能干嘛4 微服务架构中网关在哪里5 有Zuul了怎么有出来gateway 2 三大核心概念3 Gateway工作流程4 入门配置1 新建Module2 POM文件3 YML4 主启动类5 9527