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

三、谷粒商城- Spring Cloud Alibaba(3)

🌻🌻 目录 🌻🌻

  • 一、SpringCloud Alibaba
    • 1.1、SpringCloud Alibaba 简介
    • 1.2、SpringCloud Alibaba-Nacos[作为注册中心]
      • 1.2.1 将微服务注册到 nacos 中
      • 1.2.2 服务注册到 nacos,远程调用
    • 1.3、SpringCloud Alibaba-Nacos[作为配置中心]
    • 1.4、nacos 进阶
      • 1.4.1、核心概念
      • 1.4.2、加载多配置文件
    • 1.5、网关 Gateway
      • 1.5.1、简介
      • 1.5.2、核心概念
      • 1.5.3、使用

一、SpringCloud Alibaba

在这里插入图片描述

1.1、SpringCloud Alibaba 简介

1)、简介

  • Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

在这里插入图片描述

  • 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

在这里插入图片描述

  • 官网:https://spring.io/projects/spring-cloud-alibaba
  • 社区:https://sca.aliyun.com/
  • SpringCloud Alibaba github:https://github.com/alibaba/spring-cloud-alibaba

在这里插入图片描述

2)、为什么使用

在这里插入图片描述

在这里插入图片描述

SpringCloud 的几大痛点

  • SpringCloud 部分组件停止维护和更新,给开发带来不便;
  • SpringCloud 部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定制
  • SpringCloud 配置复杂,难以上手,部分配置差别难以区分和合理应用

SpringCloud Alibaba 的优势:

  • 阿里使用过的组件经历了考验,性能强悍,设计合理,现在开源出来大家用
    成套的产品搭配完善的可视化界面给开发运维带来极大的便利,搭建简单,学习曲线低。

结合 SpringCloud Alibaba 我们最终的技术搭配方案:

  • SpringCloud Alibaba - Nacos:注册中心(服务发现/注册)
  • SpringCloud Alibaba - Nacos:配置中心(动态配置管理)
  • SpringCloud - Ribbon:负载均衡
  • SpringCloud - Feign:声明式 HTTP 客户端(调用远程服务)
  • SpringCloud Alibaba - Sentinel:服务容错(限流、降级、熔断)
  • SpringCloud - Gateway:API 网关(webflux 编程模式)
  • SpringCloud - Sleuth:调用链监控
  • SpringCloud Alibaba - Seata:原 Fescar,即分布式事务解决方案

3)、版本选择

  • 由于 Spring Boot 1Spring Boot 2Actuator 模块的接口和注解有很大的变更,且spring-cloud-commons1.x.x 版本升级到 2.0.0 版本也有较大的变更,因此我们采取跟SpringBoot 版本号一致的版本:

版本适配:如何构建

在这里插入图片描述

  • ◼ 1.5.x 版本适用于 Spring Boot 1.5.x
  • ◼ 2.0.x 版本适用于 Spring Boot 2.0.x
  • ◼ 2.1.x 版本适用于 Spring Boot 2.1.x

4)、项目中的依赖

  • common 项目中引入如下。进行统一管理

在这里插入图片描述

在 common 项目中引入如下。进行统一管理
<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.0.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

1.2、SpringCloud Alibaba-Nacos[作为注册中心]

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现配置管理服务管理平台。他是使用 java 编写。需要依赖 java 环境

Nacos 文档地址: https://nacos.io/zh-cn/docs/quick-start.html

1.2.1 将微服务注册到 nacos 中

应用接入: https://github.com/alibaba/spring-cloud-alibaba/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1、首先,打开gulimall-common修改 pom.xml 文件,引入 Nacos Discovery Starter。

在这里插入图片描述

<!--服务发现-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  • 2、官网下载 nacos-server
  • https://github.com/alibaba/nacos/releases 或 https://nacos.io/download
  • 本地资源库获取

在这里插入图片描述

双击startup.cmd直接启动 :

在这里插入图片描述

在浏览器访问:http://127.0.0.1:8848/nacos 用户名/密码 都是nacos

在这里插入图片描述

  • 3、在应用的 /src/main/resources/application.yml配置文
    件中配置 Nacos Server 地址

在这里插入图片描述

spring:cloud:nacos:server-addr: 127.0.0.1:8848
  • 4、使用@EnableDiscoveryClient 开启服务注册发现功能

在这里插入图片描述

@EnableDiscoveryClient  //需要注册的这里都要加上去,如下的 gulimall-member,gulimall-order
@SpringBootApplication
public class GulimallCouponApplication {public static void main(String[] args) {SpringApplication.run(GulimallCouponApplication.class, args);}
}

为其余都添加上:

在这里插入图片描述

  • 5、在应用的 /src/main/resources/application.properties 配置文
    件中配置 Nacos Server 地址

在这里插入图片描述

#注意:每一个应用都应该有名字,这样才能注册上去。修改 application.yml 文件
#需要注册的都要配置
spring:application:name: gulimall-coupon     
  • 为其余都添加上:application.yml

在这里插入图片描述

  • 6、在idea中启动应用,观察 nacos 服务列表是否已经注册上服务

在这里插入图片描述

  • 7、启动 nacos-server
  • ◼ 双击 bin 中的 startup.cmd 文件
  • ◼ 访问 http://localhost:8848/nacos/
  • ◼ 使用默认的 nacos/nacos 进行登录

在这里插入图片描述

1.2.2 服务注册到 nacos,远程调用

注册更多的服务上去,测试使用 feign 远程调用

  • Feign 使用三步
    1、导包 openfeign
    2、编写接口,进行远程调用
    3、开启@EnableFeignClients 功能
  • 1、导包 openfeign(前面已经引入了)

在这里插入图片描述

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  • 2、编写接口,进行远程调用

在这里插入图片描述

//2.远程服务
@RequestMapping("/member/list")
public R couponmember(){CouponEntity couponEntity = new CouponEntity();couponEntity.setCouponName("优惠券满减,满200减100");return R.ok().put("coupons", Arrays.asList(couponEntity));
}

创建接口:

在这里插入图片描述

package com.gansu.gulimall.member.feign;import com.gansu.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;@FeignClient("gulimall-coupon")
public interface CouponFeignService {//2.远程服务@RequestMapping("copupon/coupon/member/list")public R couponmember();
}
  • 3、开启@EnableFeignClients 功能

在这里插入图片描述

//开启远程调用功能
@EnableFeignClients(basePackages = "com.gansu.gulimall.member.feign")
  • 4、测试(启动服务,访问:http://localhost:8000/member/member/coupons)

在这里插入图片描述

@Autowired
private CouponFeignService couponFeignService;@RequestMapping("/coupons")
public R test(){MemberEntity memberEntity = new MemberEntity();memberEntity.setNickname("张三");R couponmember = couponFeignService.couponmember();return R.ok().put("member",memberEntity).put("coupons",couponmember.get("coupons"));
}

在这里插入图片描述

  • 4、测试(关闭(类似挂掉)服务gulimall-coupon,再次访问:http://localhost:8000/member/member/coupons)

在这里插入图片描述

在这里插入图片描述

  • 6、更多配置

https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md#more

1.3、SpringCloud Alibaba-Nacos[作为配置中心]

参考 官网文档:

在这里插入图片描述

  • 1、pom.xml 引入 Nacos Config Starter。

在这里插入图片描述

 <!--服务注册-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  • 2、在应用的 /src/main/resources/bootstrap.properties配置文件中配置 Nacos Config 元数据

在这里插入图片描述

spring.application.name=nacos-config-example
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#主要配置应用名和配置中心地址
  • 3.1 之前是这样配置的:

在这里插入图片描述

coupon.user.name=Daniel
coupon.user.age=22
  • 3.2 有了nacos现在就直接在界面添加了:
    • ① 创建配置

在这里插入图片描述

    • ② 发布创建修改的配置

在这里插入图片描述

    1. 测试:动态获取配置(刷新配置)

在这里插入图片描述

@RefreshScope
/*** 1、如何使用Nases作为配置中心统一管理配置* 1)引入依赖,*  <!--服务注册-->*  <dependency>*      <groupId>com.alibaba.cloud</groupId>*       <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>* </dependency>* 2)创建-个bootstrap.properties。*          spring.application.name=nacos-config-example*          spring.cloud.nacos.config.server-addr=127.0.0.1:8848*  3)需要给配置中心默认添加一个叫 数据集(Data Id)gulimall-coupon.properties。默认规则,应用名.properti给 应用名.properties 添加任何配置*  4)动态获取配置。* @Refreshscope:动态获取并刷新配置@Value("${配置项的名}"):获取到配置。如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置。*/@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private Integer age;
@RequestMapping("/test")
public R test(){return R.ok().put("name",name).put("age",age);
};

5.启动服务,修改配置参数再次查看显示

http://localhost:7000/copupon/coupon/test

在这里插入图片描述

在这里插入图片描述

再次查看你:

在这里插入图片描述

1.4、nacos 进阶

1.4.1、核心概念

命名空间

  • 用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 GroupData ID
    配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生
    产环境的资源(如配置、服务)隔离等。
 *1)、命名空间:配置隔离;*默认:public(保留空间);默认新增的所有配置都在public空间。*1、开发,测试,生产:利用命名空间来做环境隔离。注意:在bootstrap.properties;配置上,需要使用哪个命名空间下的配置,spring.cloud.nacos.config.namespace=df5f3ec1-ff43-4e4b-8748-89a26557dc1f*2、每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置

① 查看默认的命名空间(2.4.2这里不显示默认的,建议用之前的1.1.3

在这里插入图片描述

② 添加命名空间 (dev:开发命名空间,prod:生产命名空间

在这里插入图片描述

③ 切换到命名空间 dev,并且在命名空间dev下面创建配置,如下所示:

dev:开发命名空间,prod:生产命名空间

在这里插入图片描述

在这里插入图片描述

④ 在idea中 bootstrap.properties中添加配置

在这里插入图片描述

⑤ 重启服务浏览器查看

http://localhost:7000/copupon/coupon/test

在这里插入图片描述

配置集 ID:
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

2)、配置集:所有的配置的集合
3)、配置集TD:类似文件名。Data Ip:类似文件名

配置分组:
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和MQ_topic 配置。

4)、配置分组:默认所有的配置集都属于:DEFAULT_GROUP;比如双11,618,双12
每个微服务创建自己的命名空间,使用配置分组区分环境,dev,test,prod

① 创建分组及配置

在这里插入图片描述

coupon.user.name=1111
coupon.user.age=1111

② 在idea中 bootstrap.properties中添加配置

在这里插入图片描述

⑤ 重启服务浏览器查看

http://localhost:7000/copupon/coupon/test

在这里插入图片描述

1.4.2、加载多配置文件

在这里插入图片描述

详细拆分配置如下:

  • ① 数据源配置

在这里插入图片描述

  • ② mybatis-plus配置

在这里插入图片描述

  • ③ 剩余的配置

在这里插入图片描述

④ 最终配置显示

在这里插入图片描述

⑤ 注释掉 application.properties里面的文件,随意开启一个服务进行测试,如gulimall-product

在这里插入图片描述

1.5、网关 Gateway

1.5.1、简介

网关作为流量的入口,常用功能包括路由转发权限校验限流控制等。而 springcloud gateway作为 SpringCloud 官方推出的第二代网关框架,取代了 Zuul 网关

在这里插入图片描述

  • 网关提供 API 全托管服务,丰富的 API 管理功能,辅助企业管理大规模的 API,以降低管理成本和安全风险,包括协议适配、协议转发、安全策略、防刷、流量、监控日志等功能。
  • Spring Cloud Gateway 旨在提供一种简单而有效的方式来对 API 进行路由,并为他们提供切面,例如:安全性,监控/指标 和弹性等。
  • 官方文档地址:
    https://docs.spring.io/spring-cloud-gateway/reference/spring-cloud-gateway/how-it-works.html

在这里插入图片描述

Spring Cloud Gateway 特点:

  • ⚫ 基于 Spring5,支持响应式编程和 SpringBoot2.0
  • ⚫支持使用任何请求属性进行路由匹配
  • ⚫特定于路由的断言和过滤器
  • ⚫ 集成 Hystrix 进行断路保护
  • ⚫ 集成服务发现功能
  • ⚫ 易于编写 PredicatesFilters
  • ⚫ 支持请求速率限制
  • ⚫ 支持路径重写

思考:

为什么使用 API 网关?

  • API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:
  • ⚫客户端会多次请求不同的微服务,增加了客户端的复杂性。
  • ⚫存在跨域请求,在一定场景下处理相对复杂。
  • ⚫认证复杂,每个服务都需要独立认证。
  • ⚫ 难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施。
  • ⚫某些微服务可能使用了防火墙 / 浏览器不友好的协议,直接访问会有一定的困难。
  • 以上这些问题可以借助 API 网关解决。API 网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 API 网关这一层。也就是说,API 的实现方面更多的考虑业务逻辑,而安全、性能、监控可以交由 API 网关来做,这样既提高业务灵活性又不缺安全性:
    使用 API 网关后的优点如下:

易于监控。可以在网关收集监控数据并将其推送到外部系统进行分析。

  • ⚫易于认证。可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
  • ⚫减少了客户端与各个微服务之间的交互次数。

1.5.2、核心概念

  • 路由。路由是网关最基础的部分,路由信息有一个 ID、一个目的 URL、一组断言和一组Filter 组成。如果断言路由为真,则说明请求的 URL 和配置匹配
  • 断言Java8 中的断言函数。Spring Cloud Gateway 中的断言函数输入类型是 Spring5.0 框架中的 ServerWebExchange。Spring Cloud Gateway 中的断言函数允许开发者去定义匹配来自于 http request 中的任何信息,比如请求头和参数等。
  • 过滤器。一个标准的 Spring webFilter。Spring cloud gateway 中的 filter 分为两种类型的Filter,分别是 Gateway Filter 和 Global Filter。过滤器 Filter 将会对请求和响应进行修改处理

工作原理:

  • 官方文档地址:
    https://docs.spring.io/spring-cloud-gateway/reference/spring-cloud-gateway/how-it-works.html

在这里插入图片描述

在这里插入图片描述

  • 客户端发送请求给网关,网关 HandlerMapping 判断是否请求满足某个路由,满足就发给网关的 WebHandler。这个 WebHandler 将请求交给一个过滤器链,请求到达目标服务之前,会执行所有过滤器的 pre 方法。请求到达目标服务处理之后再依次执行所有过滤器的 post 方法。
  • 一句话满足某些断言(predicates)就路由到指定的地址(uri),使用指定的过滤器(filter)

1.5.3、使用

1、创建网关子模块 gulimall-gateway,引入网关

  • ① 创建 子模块 gulimall-gateway

在这里插入图片描述

  • ② 创建 子模块 gulimall-gateway

在这里插入图片描述

  • ③ 搜索 gateway如下

在这里插入图片描述

  • ④ 统一版本引入依赖如下

在这里插入图片描述

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
  • ⑤ 分别配置nacos服务发现(application.properties)和服务配置(bootstrap.properties)

在这里插入图片描述
在这里插入图片描述

spring:application:name: gulimall-gateway

在这里插入图片描述

  • ⑥ 在 gulimall-gateway下面创建 application.propertiesapplication.ymlbootstrap.properties

参考官网:https://docs.spring.io/spring-cloud-gateway

在这里插入图片描述

gulimall-gateway下面创建 application.propertiesapplication.ymlbootstrap.properties

在这里插入图片描述
application.properties

server.port=88spring.application.name=gulimall-gateway
spring.cloud.nacos.server-addr=127.0.0.1:8848

application.yml

spring:application:name: gulimall-gatewaycloud:nacos:discovery:server-addr: 127.0.0.1:8848gateway:routes:# 测试内容- id: test_routeuri: https://www.baidu.compredicates:- Query=url,baidu- id: qq_routeuri: https://www.qq.compredicates:- Query=url,qqdatasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.10.100:3306/gulimall_smsusername: rootpassword: rootmybatis-plus:mapper-locations: classpath:/mapper/**/*.xmlglobal-config:db-config:id-type: auto

bootstrap.properties

spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=68c8750d-50cc-4655-a8b9-bccb38ac99d4
  • ⑦ 不开启数据关联 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

在这里插入图片描述

启动测试:http://localhost:88/hello?url=baidu

在这里插入图片描述

https://qq.com/hello

在这里插入图片描述

  • Gitee地址:https://gitee.com/Daniel-sys/gulimall.git

在这里插入图片描述

  • 文章所有源码

相关文章:

三、谷粒商城- Spring Cloud Alibaba(3)

&#x1f33b;&#x1f33b; 目录 &#x1f33b;&#x1f33b; 一、SpringCloud Alibaba1.1、SpringCloud Alibaba 简介1.2、SpringCloud Alibaba-Nacos[作为注册中心]1.2.1 将微服务注册到 nacos 中1.2.2 服务注册到 nacos&#xff0c;远程调用 1.3、SpringCloud Alibaba-Naco…...

MATLAB和Python激发光谱

激发光谱是一种用于研究物质发光特性的分析方法。当样品吸收特定波长的光时&#xff0c;电子从基态跃迁至激发态。随后&#xff0c;当电子返回基态时&#xff0c;会发射出光子&#xff0c;产生荧光或磷光。激发光谱通过测量不同波长的入射光激发下的发光强度来获取数据。该技术…...

学习笔记024——Ubuntu 安装 Redis遇到相关问题

目录 1、更新APT存储库缓存&#xff1a; 2、apt安装Redis&#xff1a; 3、如何查看检查 Redis版本&#xff1a; 4、配置文件相关设置&#xff1a; 5、重启服务&#xff0c;配置生效&#xff1a; 6、查看服务状态&#xff1a; 1、更新APT存储库缓存&#xff1a; sudo apt…...

UE5 腿部IK 解决方案 footplacement

UE5系列文章目录 文章目录 UE5系列文章目录前言一、FootPlacement 是什么&#xff1f;二、具体实现 前言 在Unreal Engine 5 (UE5) 中&#xff0c;腿部IK&#xff08;Inverse Kinematics&#xff0c;逆向运动学&#xff09;是一个重要的动画技术&#xff0c;用于实现角色脚部准…...

北航软件算法C4--图部分

C4上级图部分 TOPO!步骤代码段TOPO排序部分 完整代码 简单的图图题目描述输入输出样例步骤代码段开辟vector容器作为dist二维数组初始化调用Floyd算法查询 完整代码 负环题目描述输入输出样例步骤代码段全局变量定义spfa1函数用于判断是否有负环spfa2用于记录每个点到1号点的距…...

PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口

PCL点云开发-解决在Qt中嵌入点云窗口出现的一闪而过的黑窗口 众所周知&#xff0c;在windows下开发PCL点云最快的方式就是到官网下载其预编译好的库&#xff0c;比如&#xff1a; PCL-1.14.0-AllInOne-msvc2022-win64.exe 这时候你到网络上搜索&#xff0c;大概率会有两种方案…...

本地音乐服务器(二)

4. 上传音乐模块设计 4.1 上传音乐的接口设计 请求和响应设计&#xff1a; 新建music实体类&#xff1a; Data public class Music {private int id;private String title;private String singer;private String time;private String url;private int userid; } 4.2 创建Mu…...

第三十六篇——伯努利试验:到底如何理解随机性?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 概率论指导着我们对于直觉不靠谱的事情&#xff0c;以及为我们如何更高效…...

【Android、IOS、Flutter、鸿蒙、ReactNative 】屏幕适配

Android Java 屏幕适配 参考 今日头条适配依赖配置 添加设计屏幕尺寸 设置字体大小 通过切换不同屏幕尺寸查看字体大小 设置文本宽高 通过切换不同屏幕尺寸查看文本宽高 Android Compose 屏幕适配 <...

candence : 如何利用EXCEL 绘制复杂、多管脚元件

如何利用EXCEL 绘制复杂、多管脚元件 前面的步骤直接略过 我们以STM32F407VEXX 系列 100pin 芯片为例讲解&#xff1a; 1、新建好一个空元件 2、使用阵列&#xff0c;放置管脚 点击 “ ok ” 3、选中所有管脚 右键 “edit properites” 出现如下页面 4、点击 左上角&…...

项目配置文件选择(Json,xml,Yaml, INI)

选择使用哪种类型的配置文件&#xff08;如 JSON、XML 或其他格式&#xff09;取决于多个因素&#xff0c;包括项目的需求、团队的熟悉程度、数据结构的复杂性以及可读性和可维护性等。以下是对常见配置文件格式的比较&#xff0c;以及在不同情况下的推荐&#xff1a; 1. JSON&…...

Android 使用Retrofit 以纯二进制文件流上传文件

一、背景 一般上传文件都是以表单形式上传文件&#xff0c;最近项目中涉及到非表单形式上传文件流&#xff0c;分为单个文件流上传、大文件分段上传&#xff0c;此种情景资料较少&#xff0c;这里记录下。 二、方案介绍 2.1 需求协议 1. 上传文件 API 端点&#xff1a;/serv…...

Vue3踩坑记录

目录 一、定义常变量 1.1、ref和reactive到底用谁&#xff1f; 二、双向绑定 2.1、直接改变表格该行数据 2.1、在弹窗改变表格该行数据 一、定义常变量 1.1、ref和reactive到底用谁&#xff1f; 已知&#xff1a;使用ref定义基础类型数据&#xff1b;使用reactive定义复…...

大数据-227 离线数仓 - Flume 自定义拦截器(续接上节) 采集启动日志和事件日志

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…...

【热门主题】000054 ECMAScript:现代 Web 开发的核心语言

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…...

【Pytorch】torch.nn.functional模块中的非线性激活函数

在使用torch.nn.functional模块时&#xff0c;需要导入包&#xff1a; from torch.nn import functional 以下是常见激活函数的介绍以及对应的代码示例&#xff1a; tanh (双曲正切) 输出范围&#xff1a;(-1, 1) 特点&#xff1a;中心对称&#xff0c;适合处理归一化后的数据…...

reactflow 中 useNodesState 模块作用

1. 节点状态管理核心功能 useNodesState是一个关键的钩子函数&#xff0c;用于专门管理节点&#xff08;Nodes&#xff09;的状态。节点是流程图的核心元素&#xff0c;它们可以代表各种实体&#xff0c;如流程中的任务、系统中的组件或者数据结构中的元素。 useNodesState提…...

Go语言内存分配源码分析学习笔记

大家好&#xff0c;我是V 哥。GO GO GO&#xff0c;今天来说一说Go语言内存分配问题&#xff0c;Go语言内存分配的源码主要集中在runtime包中&#xff0c;它实现了Go语言的内存管理&#xff0c;包括初始化、分配、回收和释放等。下面来对这些过程详细分析一下&#xff0c;先赞后…...

【jvm】方法区常用参数有哪些

目录 1. -XX:PermSize2. -XX:MaxPermSize3. -XX:MetaspaceSize&#xff08;Java 8及以后&#xff09;4. -XX:MaxMetaspaceSize&#xff08;Java 8及以后&#xff09;5. -Xnoclassgc6. -XX:TraceClassLoading7.-XX:TraceClassUnLoading 1. -XX:PermSize 1.设置JVM初始分配的永久…...

JAVA环境的配置

首先找到JDK环境的官网。 Java Archive Downloads - Java SE 8u211 and laterhttps://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 我下载的最后一个x64.exe&#xff0c;下载后&#xff0c;直接双击运行&#xff0c;我这里默认安装到…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...