SpringCloud服务拆分:Nacos服务注册中心 + LoadBalancer服务负载均衡使用
SpringCloud中Nacos服务注册中心 + LoadBalancer服务负载均衡使用
- 前言
- Nacos
- 工作流程
- nacos安装
- docker安装
- window安装
- 运行nacos
- 微服务集成nacos
- 高级特性
- 1.服务集群
- 配置方法
- 效果图
- 模拟服务实例宕机
- 2.权重配置
- 3.环境隔离
- 如何启动集群节点
- 本地启动多个节点方法
- LoadBalancer
- 集成LoadBalancer
- LoadBalancer流程
- 源码跟踪
- 自定义负载均衡算法
- 使用自定义负载均衡算法
- 结语
😀大家好!我是向阳🌞,一个想成为优秀全栈开发工程师的有志青年!
📔今天来说一说SpringCloud中Nacos服务注册中心 + LoadBalancer服务负载均衡使用。
前言
本篇文章主要是使用Nacos来注册服务实例,使用Nacos来管理这些服务实例,然后使用LoadBalancer让服务消费方负载均衡调用服务提供方。
这里有一些代码准备,Contorller的代码我就不贴了,贴一个order服务远程调用user服务,获取订单对应的用户信息。
这里使用的是RestTemplate来进行调用远程服务,后续会用OpenFeign来进行替换优化。
@Service
public class OrderServiceImpl implements OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;/*** 查询订单(携带用户信息)** @param orderId* @return*/@Overridepublic Order findOrderByOrderId(Long orderId) {Order order = orderMapper.findOrderByOrderId(orderId);User user = restTemplate.getForObject("http://ssgw-cloud-user/api/user/findUserByUserId/" + order.getUserId(),User.class);order.setUser(user);return order;}
}
Nacos
官方文档地址:Nacos文档地址
Nacos有多个特性,这里我们主要介绍的是他的服务发现和服务健康监测这个特性,他还有个我常用的特性,那就是动态配置服务,以后可能会说到。
我们把服务都注册到Nacos里面,Nacos会对服务进行实时的健康检查,阻止向不健康的主机或服务实例发送请求。
工作流程
通过注册中心可以对服务提供方和服务消费方进行解耦。具体的工作模式如下图所示:
工作流程说明:
- 服务提供方在启动的时候,会向注册中心注册自己服务的详情信息 (ip、端口号等) 。在注册中心中会维护一张服务清单,保存这些注册信息,注册中心需要以心跳的方式(30s,服务向注册中心发送心跳)去监测清单中的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。
- 服务消费方向服务注册中心咨询服务,并获取所有服务的实例清单,然后,按照指定的负载均衡算法从服务清单中选择一个服务实例进行访问。
- 每当服务提供方有节点不可用后,服务消费方会重新缓存可用的提供方信息(ip、端口号等)。
nacos安装
docker安装
直接在linux虚拟机中用docker进行以下命令即可。
# 拉取镜像
docker pull nacos/nacos-server:v2.2.2# 创建容器
docker run --name nacos -e MODE=standalone -p 8848:8848 -p 9848:9848 -d nacos/nacos-server:v2.2.2# nacos2.x的版本新增了一个客户端与服务端的gRpc的通讯端口号9848
window安装
不同的版本有不同的注意事项,可以去官方文档查阅,或者具体的细节可以查看其他博客,这里不详细赘述。
二进制包下载地址
运行nacos
docker的运行在上面已经提到了,docker run xxx就已经运行了。
Window版本的docker配置文件默认是单机模式启动,所以我们运行nacos要加上 standalone 这个命令。
startup.cmd -m standalone
运行成功的页面,nacos的默认端口是8848,我们访问:http://localhost:8848/nacos 即可访问到图形化界面,默认账号密码都是 nacos。
微服务集成nacos
在pom.xml中加入以下依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在application.yml中加入以下配置:
spring:# 配置nacos注册中心的地址cloud:nacos:discovery:server-addr: localhost:8848 # 如果在虚拟机安装,则改成你对应的ip地址application: name: spzx-cloud-user # 每一个服务注册到nacos注册中心都需要提供一个服务名称,order微服务注册的时候需要更改微服务名称
加入对应的配置文件后,在nacos图形化界面就可以看到以下信息,这里我已经启动了3个user服务,所以 ssgw-cloud-user 的实例数为3。
高级特性
1.服务集群
在实际生产环境中,为了保证每一个服务的高可用,那么,此时就需要去构建服务集群,但是,并不是说把所有的服务都部署在一个机房里。而是将多个服务分散的部署到不同的机房中,每一个机房的服务可以看做成是一个集群。
微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群。例如:上海机房内的order微服务应该优先访问同机房的user微服务。
配置方法
配置yml文件:
spring:cloud:nacos:discovery:cluster-name: SH # 配置服务所属集群
集成nacos的负载均衡算法,也是在yml文件中配置,配置了之后,就会按照服务集群来进行访问对应的服务实例,访问默认是随机访问。
spring:cloud:loadbalancer:nacos:enabled: true
一个服务不同实例配置不同的集群方法和下面如何启动集群节点方法一样,这里贴个图。
我们这里用户服务,两个配置BJ,两个配置SH,订单服务配置了SH,根据上面的讲述,如果我们访问订单服务的接口,我们应该优先访问的是两个SH的用户服务。
配置了服务集群后,nacos的服务实例有所变化,如下面两张图。
效果图
我们访问订单的接口,查看用户服务的控制台,我们可以看到只有配置了SH的两个用户服务控制台信息有打印SQL语句,说明被只有这两个服务被调用了。
其余三个我就不贴图了…
模拟服务实例宕机
我们可以在nacos的图形化界面中下线按钮来下线对应的服务实例,这样就模拟了服务宕机场景,此时我们下线两个SH的用户服务实例,我们访问订单接口,此时访问就会访问两个BJ的服务实例,如下图所示。
此时只会调用在配置在BJ的两个服务实例中。
其余三个我就不贴图了…
2.权重配置
我们可以对不同的服务进行权重配置,比如性能好的服务器权重就可以大一点,性能差的服务器泉州就可以小一点。
这个我们可以直接在nacos图形化界面进行配置,点击编辑后,即可在弹出的弹窗进行权重配置。
我们还可以在yml文件中进行配置:
spring:cloud:nacos:discovery:weight: 0.1
3.环境隔离
在实际的开发过程中,可能会存在很多个软件环境:开发环境、测试环境、生产环境。
nacos也是支持多环境隔离配置的,在nacos中是通过namespace来实现多环境的隔离。
完整的服务注册数据存储结构如下所示:
namespace + group 才可以确定具体的微服务实例。默认情况下,所有service、group都在同一个namespace,名为public。
在nacos的图形化界面就可以进行namespace的添加。
给微服务添加名称空间的配置,来指定该微服务所属环境,这里修改order的application.yml文件,改为dev:
spring:# 配置nacos注册中心的地址cloud:nacos:discovery:namespace: dev # 配置服务实例所属名称空间
这个时候order和其他的user实例已经不在同一个namespace命名空间下了,这个时候我们再次访问接口就会报错,因为访问不到了。
控制台报错找不到对应的实例:
我们也可以分配组,在yml配置文件中进行配置:
spring:# 配置nacos注册中心的地址cloud:nacos:discovery:namespace: dev # 配置服务实例所属名称空间group: ORDER_GROUP
如何启动集群节点
我们启动多个user节点,让order服务负载调用user节点。
本地启动多个节点方法
我们对原本的user服务右键点击,选择Copy Configuration来拷贝配置,进而修改新的配置,我们这里修改端口,防止端口冲突启动不起来。
服务名称可改可不改使用默认的也可以,但是一定要覆盖配置文件中的端口号。
选择Override configuration properties后,添加以下配置来覆盖原有的配置,约定大于配置,走的就是我们这里配置的端口。
配置完毕后,启动就是下图所示的结果。
LoadBalancer
集成LoadBalancer
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
Spring Cloud LoadBalancer 是Spring Cloud中负责客户端负载均衡的模块,其主要原理是通过选择合适的服务实例来实现负载均衡。
客户端负载均衡:就是负载均衡算法由客户端提供,默认是轮询负载均衡,就是每个服务被依次调用。
我们多此访问我们项目的接口,可以从控制台中发现,三个用户服务的控制台中各有一条SQL查询信息,说明每个都被调用了一次。
http://localhost:10200/api/order/findOrderByOrderId/101
LoadBalancer流程
Spring Cloud LoadBalancer的底层采用了一个拦截器【LoadBalancerInterceptor】,拦截了RestTemplate发出的请求,对地址做了修改。
执行流程说明:
-
通过 LoadBalancerInterceptor 请求拦截器拦截我们的 RestTemplate请求:http://ssgw-cloud-user/api/user/findUserByUserId/1
-
获取请求的url,然后,从请求的url中获取服务提供方的主机名称(ssgw-cloud-user)
-
然后,调用LoadBalancerClient中的execute方法,将服务提供方的名称传递过去
-
在LoadBalancerClient的choose方法中通过ReactiveLoadBalancer.Factory从Nacos注册中心中获取服务列表以及负载均衡算法实例对象
-
通过ReactiveLoadBalancer从服务列表中选择一个服务实例地址,然后,发起远程调用
源码跟踪
首先我们进入到 LoadBalancerInterceptor 的 intercept 方法,可以看到我们调用远程服务的uri和服务名称serviceName。
紧接着进入到 LoadBalancerClient 的 execute 方法,这个方法主要来处理服务id和用户请求,我们主要看他的 choose 方法。
我们从choose方法可以看出来,我们的负载均衡器是我们在配置文件中配置的 NacosLoadBalancer 负载均衡器。
紧接着调用负载均衡器的 choose 方法,从服务列表中选择一个服务实例对象。
如果我们注释掉配置文件中的集成nacos的负载均衡算法,我们可以得到负载均衡器变成了默认的RR负载均衡器也就是轮询调度负载均衡器(RoundRobinLoadBalancer)。
自定义负载均衡算法
详细注释在代码中都有,这里不多赘述。
public class CustomLoadBalancerConfiguration {/*** @param environment: 用于获取环境属性配置,其中LoadBalancerClientFactory.PROPERTY_NAME表示该负载均衡器要应用的服务名称。* @param loadBalancerClientFactory: 是Spring Cloud中用于创建负载均衡器的工厂类,通过getLazyProvider方法获取ServiceInstanceListSupplier对象,以提供可用的服务列表。* ServiceInstanceListSupplier:用于提供ServiceInstance列表的接口,可以从DiscoveryClient或者其他注册中心中获取可用的服务实例列表。* @return*/@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);}
}
使用自定义负载均衡算法
这里使用的是 RestTemplate 来远程调用其他的服务接口(后期会换成 OpenFeign),所以我们在 RestTemplateConfiguration 类上面加上 @LoadBalancerClients 注解来指定我们要调用哪个服务实例,指定使用我们自定义的负载均衡算法来进行调用。
@Configuration
@LoadBalancerClients(value = {@LoadBalancerClient(name = "ssgw-cloud-user", configuration = CustomLoadBalancerConfiguration.class)
})
public class RestTemplateConfiguration {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}
结语
至此我们就完成了我们的主题《SpringCloud服务拆分:Nacos服务注册中心 + LoadBalancer服务负载均衡使用》,更多的细节和使用方法还等着我们去探索,加油吧👍!
——👦[作者]:向阳256
——⏳[更新]:2025.5.8
——🥰本人技术有限,如果有不对指正需要更改或者有更好的方法,欢迎到评论区留言。
相关文章:
SpringCloud服务拆分:Nacos服务注册中心 + LoadBalancer服务负载均衡使用
SpringCloud中Nacos服务注册中心 LoadBalancer服务负载均衡使用 前言Nacos工作流程nacos安装docker安装window安装 运行nacos微服务集成nacos高级特性1.服务集群配置方法效果图模拟服务实例宕机 2.权重配置3.环境隔离 如何启动集群节点本地启动多个节点方法 LoadBalancer集成L…...
视频编解码学习9之照相机历史
照相机的发展历史可以追溯到19世纪初,至今已有200多年。以下是照相机技术演进的主要阶段和里程碑: 1. 早期探索阶段(1820s-1880s) 1826年:法国人尼埃普斯(Nicphore Nipce)用沥青感光法拍摄《窗…...
物流无人机自动化装卸技术解析!
一、自动化装卸技术模块的技术难点 1. 货物多样性适配 物流场景中货物包装类型、尺寸、材质差异大,如农产品、医疗物资、工业设备等,要求装卸模块具备高度柔性化设计。例如,单元货物需视觉识别系统进行单个抓取,而整托货物需大…...
图形渲染+事件处理最终版
基于之前做的项目图形移动处理-CSDN博客添加了相机,透视投影,鼠标控制图形旋转。虽然个人感觉这个项目用的是一个二维的三角形,给他加透视投影和相机意义不大,因为透视投影是近大远小,我这个程序设置了放大缩小的限制&…...
前端三大件---CSS
目录 一、CSS 概述 二、引入 CSS 的三种方式 2.1 内联样式 2.2 内部样式表 2.3 外部样式表 三、CSS 选择器 3.1 ID 选择器 3.2 class 选择器 3.3 标签选择器 3.4 通配选择器 3.5 分组选择器 3.6 层级选择器 3.7 属性选择器 3.8 伪类选择器 3.9 同辈选择器 四、…...
蓝桥杯FPGA赛道第二次模拟题代码
一、顶层文件 module test( input wire sys_clk, input wire sys_rst, input wire [3:0]key_in, output reg [7:0]led,output wire scl, inout wire sda,//i2c的信号output wire [7:0]sel, output wire [7:0]seg//数码管的驱动 );wire [23:0] data ; reg [31:0] dsp_dat…...
keep the pipe Just full But no fuller - BBR 与尘封 40 年的求索
推荐一部短视频 Keep the pipe just full, but no fuller,作者就是大名鼎鼎的 L. Kleinrock,现代分组交换网的奠基人,这里有关于他这个人的介绍: https://www.lk.cs.ucla.edu/index.html https://en.wikipedia.org/wiki/Leonard…...
《React Native热更新实战:用Pushy打造无缝升级体验》
《React Native热更新实战:用Pushy打造应用“空中加油”,实现无缝升级体验》 写在前面:当你的APP需要"空中加油"时… 想象一下这样的场景:凌晨2点,你的React Native应用刚上线就爆出重大BUG,用户差评如潮水般涌来,应用商店审核至少需要3天…此刻你多么希望能…...
【开源解析】基于Python的智能文件备份工具开发实战:从定时备份到托盘监控
📁【开源解析】基于Python的智能文件备份工具开发实战:从定时备份到托盘监控 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码࿰…...
第四章:基于langchain构造一个完整RAG系统
文章目录 引言一、RAG的基本原理1.1 什么是RAG?1.2 RAG的应用场景 二、RAG系统的构建步骤2.1 环境准备2.2 加载和处理文档2.2.1 文档加载2.2.2 文本分割 2.3 构建嵌入模型2.4 创建向量存储与检索器2.5 检索与生成2.5.1 检索相关文档2.5.2 生成答案 三、完整代码示例…...
uniapp|实现多终端视频弹幕组件、内容轮询、信息表情发送(自定义全屏半屏切换、弹幕启用)
基于UniApp框架实现跨终端视频弹幕组件的开发,结合CSS3动画与setInterval轮询机制,完成弹幕从右向左的动态滚动效果,针对交互需求,设计弹幕启用开关、全屏/半屏模式切换功能,并利用cover-view组件解决原生层级覆盖问题。 目录 引言视频弹幕的交互价值与多终端适配需求Un…...
数据结构(四)——栈的应用—数制转换
利用栈进行数制转换: 十进制转换八进制:先将十进制数除以八得到余数,余数入栈,然后将得到的商继续除以八,直到商为零 #include <stdio.h> #include <stdlib.h>#define MAXSIZE 100//数制转换//定义链表节…...
flinksql bug : Max aggregate function does not support type: CHAR
这个问题是flink中 CHAR 存在语义歧义,主要涉及到位数的关系,这里不做多讨论。 这个问题已经有人提了pr,新版本可以关注是否有解决 这个报错发生在 max(测试字段) ,这个测试字段如果是char 就会报错不支持 解决办法:…...
解决社区录音应用横屏状态下,录音后无法播放的bug
最近看到社区有小伙伴反映,社区录音应用横屏时,录音后无法播放的问题。现分享解决办法。 社区录音应用的来源:https://gitee.com/openharmony/applications_app_samples/tree/OpenHarmony-5.0.2-Release/code/SystemFeature/Media/Recorder …...
【MySQL】存储引擎 - InnoDB详解
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
软件工程之形式化说明技术深度解析
按照形式化的程度,可以把软件工程使用的方法划分成非形式化、半形式化和形式化3种。用自然语言描述需求规格说明书,是典型的非形式化方法。用数据流图或实体-联系图建立模型,是典型的半形式化方法。 所谓形式化方法,是描述系统性…...
Nacos源码—6.Nacos升级gRPC分析一
大纲 1.Nacos 2.x版本的一些变化 2.客户端升级gRPC发起服务注册 3.服务端进行服务注册时的处理 4.客户端服务发现和服务端处理服务订阅的源码分析 1.Nacos 2.x版本的一些变化 变化一:客户端和服务端的交互方式由HTTP升级为gRPC Nacos 1.x服务端会提供一系列的…...
使用 React 实现语音识别并转换功能
在现代 Web 开发中,语音识别技术的应用越来越广泛。它为用户提供了更加便捷、自然的交互方式,例如语音输入、语音指令等。本文将介绍如何使用 React 实现一个简单的语音识别并转换的功能。 功能概述 我们要实现的功能是一个语音识别测试页面࿰…...
2.5 点云数据存储格式——大型点云传输格式
通常,进行大型点云数据传输时,一般采用一种后缀为bin的文...
Windows系统下使用Kafka和Zookeeper,Python运行kafka(一)
下载和安装见Linux系统下使用Kafka和Zookeeper 配置 Zookeeper Zookeeper 是 Kafka 所依赖的分布式协调服务。在 Kafka 解压目录下,有一个 Zookeeper 的配置文件模板config/zookeeper.properties,你可以直接使用默认配置。 启动 Zookeeper 打开命令提示符(CMD),进入 K…...
数据结构(三)——栈和队列
一、栈和队列的定义和特点 栈:受约束的线性表,只允许栈顶元素入栈和出栈 对栈来说,表尾端称为栈顶,表头端称为栈底,不含元素的空表称为空栈 先进后出,后进先出 队列:受约束的线性表࿰…...
零基础入门Hadoop:IntelliJ IDEA远程连接服务器中Hadoop运行WordCount
今天我们来聊一聊大数据,作为一个Hadoop的新手,我也并不敢深入探讨复杂的底层原理。因此,这篇文章的重点更多是从实际操作和入门实践的角度出发,带领大家一起了解大数据应用的基本过程。我们将通过一个经典的案例——WordCounter&…...
在Postman中高效生成测试接口:从API文档到可执行测试的完整指南
引言 在API开发与测试流程中,Postman是一款高效的工具,能将API文档快速转化为可执行的测试用例。本文以《DBC协议管理接口文档》为例,详细讲解如何通过Postman实现接口的创建、配置、批量生成及自动化测试,帮助开发者和测试人员提升效率,确保接口质量。 一、准备工作:理…...
飞云分仓操盘副图指标操作技术图文分解
如上图,副图指标-飞云分仓操盘指标,指标三条线蓝色“首峰线”,红色“引力1”,青色“引力2”,多头行情时“首峰线”和“引力1”之间显示为红色,“引力1”和“引力2”多头是区间颜色显示为紫色。 如上图图标信…...
K8s中的containerPort与port、targetPort、nodePort的关系:
pod中的containerPort与service中的port、targetPort、nodePort的关系: 1、containerPort为pod的配置,对应pod内部服务监听的具体端口,例如nginx服务默认监听80端口,那么nginx的pod的containerPort应该配置为80,例如m…...
jquery+ajax+SpringBoot实现前后端分离技术
一、前端方面: 第1步,在前端HTML页面的头部引入jquery <head><meta http-equiv"Content-Type" content"text/html;charsetUTF-8"><title>XXX</title><link rel"stylesheet" type"text/…...
阀门产业发展方向报告(石油化工阀门应用技术交流大会)
本文大部分内容来自中国通用机械工业协会副会长张宗列在“2024全国石油化工阀门应用技术交流大会”上发表的报告。 一、国外阀门产业发展 从全球阀门市场分布看,亚洲是最大的工业阀门市场,美洲是全球第二大工业阀门市场,欧洲位列第三。 从国…...
华为云Astro后端开发中对象、事件、脚本、服务编排、触发器、工作流等模块的逻辑关系如何?以iotDA数据传输过程举例演示元素工作过程
目录 🏭 类比总览:低代码平台就像一座自动化工厂 🧱 1. 对象(Object) = 工厂里的“原材料仓库” 🧱 2. 结构体(Structure) = 自定义的“装配模具” 🔔 3. 事件(Event) = 触发的“感应器” ✍️ 4. 脚本(Script) = 后台的“逻辑处理代码” ⚙️ 5. 服务编…...
面向小型企业顶点项目的网络安全咨询人机协作框架
1. 简介 1.1. 背景和动机 由于小型企业无法访问结构化系统,且缺乏大型组织通常拥有的专用资源,它们经常面临巨大的网络安全挑战 [ [1 ]。为大型企业设计的网络安全框架通常对小型企业来说过于复杂且不切实际,导致它们容易受到复杂的网络威胁 2 ]。这种复杂性可能导致小型…...
RSAC 2025观察:零信任+AI=网络安全新范式
2025年4月28日~5月1日,全球最具影响力的网络安全盛会RSAC 2025在美国旧金山举办,吸引了全球44,000名网络安全从业者参与。大会以“Many Voices. One Community.”为主题,聚焦AI安全、供应链风险、零信任等核心议题。其中,AI Agent…...
ruoyi-flowable-plus 前端框架启动报错修复
版本 1. ruoyi-flowable-plus 前端框架启动报错修复 启动时设置环境变量 "scripts": {"dev": "SET NODE_OPTIONS--openssl-legacy-provider && vue-cli-service serve","build:prod": "vue-cli-service build",&qu…...
安全可控·高效响应|北峰智能互通矿业通信系统解决方案
项目概况 随着矿业行业工作环境日益复杂,涵盖地下开采、露天挖掘、矿物运输及深加工等多个环节,作业区域呈现广阔且分散的特点,往往存在诸多安全风险。当面临突发事故,由于应急救援体系不完善,救援通信系统相对落后&a…...
ubuntu查看安装的软件包的位置
在 Ubuntu 中,libcli11-dev 是一个 头文件库(header-only),因此它不会像动态库(.so 文件)那样有明确的下载路径。但你可以通过以下方法查看它的安装位置: 1. 查看 libcli11-dev 安装的文件 使用…...
【金仓数据库征文】金仓数据库 KES 助力企业数据库迁移的实践路径
在企业数字化转型浪潮的强力推动下,数据库迁移已成为企业升级 IT 架构、提升数据管理能力的关键环节。从 MySQL 到金仓数据库 KingbaseES(KES)的迁移方案,为企业提供了一条高效、可靠的数据库升级路径。 一、迁移挑战与金仓数据…...
Nginx1.26.2安装包编译安装并配置stream模块
准备nginx安装文件:nginx-1.26.2.tar.gz cd /usr/local wget http://nginx.org/download/nginx-1.26.2.tar.gz tar -zxvf nginx-1.26.2.tar.gz && cd nginx-1.26.2 1.创建安装目录 mkdir nginx 2.解压安装文件nginx-1.26.2.tar.gz tar -zxvf nginx-1.26…...
kotlin @JvmStatic注解的作用和使用场景
1. JvmStatic 的作用 JvmStatic 是 Kotlin 提供的一个注解,用于在 JVM 上将伴生对象(companion object)中的方法或属性暴露为 Java 静态方法或字段。 作用对象:只能用在 companion object 中的函数或属性。效果: 在 …...
Blind SSRF with Shellshock exploitation过关
Blind SSRF with Shellshock exploitation 生活就像一杯咖啡,苦与甜都是必需的,关键是要学会享受每一口。 先说通关方法: 1.首先在bp的扩展商店安装插件 Collaborator Everywhere 2.进入靶场首页 复制url https://0af600d3048daad080e6…...
2025-05-08 Unity 网络基础9——FTP通信
文章目录 1 FTP1.1 工作原理1.2 传输模式 2 搭建 FTP 服务器2.1 启用服务2.2 配置站点2.3 设置防火墙2.4 指定用户登录 3 常用 API3.1 NetworkCredential3.2 FtpWebRequest3.3 FtpWebResponse 4 实战操作4.1 上传文件4.2 下载文件4.3 删除文件4.4 获取文件大小4.5 创建文件夹4.…...
3.2.3 掌握RDD转换算子 - 5. 合并算子 - union()
在本节课中,我们学习了Spark RDD的union()算子,它能够将两个数据类型一致的RDD合并为一个新的RDD,主要用于整合不同数据源。通过案例演示,我们成功将两个简单的数字RDD合并,直观地看到合并结果是按原顺序纵向拼接&…...
数据来源合法性尽职调查:保障权益的关键防线
首席数据官高鹏律师团队 在当今数字化时代,数据已成为企业和个人最为宝贵的资产之一。然而,伴随着数据的广泛应用与流通,其来源的合法性问题愈发凸显,犹如隐藏在暗处的礁石,稍不留神就可能让涉事主体陷入法律的漩涡。…...
sui在windows虚拟化子系统Ubuntu和纯windows下的安装和使用
一、sui在windows虚拟化子系统Ubuntu下的安装使用(WindowsWsl2Ubuntu24.04) 前言:解释一下WSL、Ubuntu的关系 WSL(Windows Subsystem for Linux)是微软推出的一项功能,允许用户在 Windows 系统中原生运行…...
springmvc的入门案例
springmvc的概述 SpringMVC的概述 是一种基于Java实现的MVC设计模型的请求驱动类型的轻量级WEB框架。Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架…...
【MCP】为什么使用Streamable HTTP: 相比SSE的优势与实践指南
在现代Web开发中,实时通信已经成为许多应用的核心需求。从聊天应用到股票市场更新,从游戏服务器到AI模型通信,各种技术应运而生以满足这些需求。最近,Model Context Protocol (MCP) 引入了一种新的传输机制 —— Streamable HTTP&…...
CentOS的防火墙工具(firewalld和iptables)的使用
CentOS的防火墙工具因版本不同而异,以下是具体操作步骤: 一、firewalld(CentOS 7及以上默认工具) 1、安装与启动: 安装:sudo yum install firewalld 启动服务:sudo systemctl start fir…...
解析小米大模型MiMo:解锁语言模型推理潜力
一、基本介绍 1.1 项目背景 在大型语言模型快速发展的背景下,小米AI团队推出MiMo系列模型,突破性地在7B参数规模上实现卓越推理能力。传统观点认为32B以上模型才能胜任复杂推理任务,而MiMo通过创新的训练范式证明:精心设计的预训练和强化学习策略,可使小模型迸发巨大推理…...
web 自动化之 Selenium 元素定位和浏览器操作
文章目录 一、元素定位的八大方法1、基于 id/name/class/tag_name 定位2、基于 a 标签元素的链接文本定位3、基于xpath定位4、css定位 二、浏览器操作1、信息获取2、 浏览器关闭3、 浏览器控制 一、元素定位的八大方法 web 自动化测试就是通过代码对网页进行测试,在…...
vscode如何使用 GitHub Copilot
1.在vscode中扩展工具栏搜索“copilot”,选择GitHub Copilot安装。 2.使用快捷键CtrlAltI 打开聊天界面,输入问题后回车即可使用。 注意: 使用copilot需要使用GitHub账号先登录,如果打不开登录页面,需要修改host文件&a…...
AWS之存储服务
存储术语 分类 接口/技术类型 应用场景特点 关系及区别 机械硬盘接口 IDE(Integrated Drive Electronics) 早期用于个人电脑,现已逐渐淘汰 机械硬盘接口、固态硬盘接口是硬盘与主机或其他设备连接的物理和协议规范; FC - …...
安装 Docker
一、CentOS 系统安装 Docker 1. 卸载旧版本(如有) sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 2. 安装依赖工具 sudo yum install -y…...
代理协议解析:如何根据需求选择HTTP、HTTPS或SOCKS5?
在现代网络中,代理服务器是一种常见的工具,用于提高安全性、匿名性和访问速度。常见的代理协议包括HTTP、HTTPS和SOCKS5。本文将详细解析这三种代理协议,并帮助您根据具体需求选择最合适的代理协议。 一、HTTP代理 1.1 特点 用途广泛&…...