微服务-微服务Alibaba-Nacos注册中心实现
1. 系统架构的演变
1.1 单体架构

1.2 垂直架构
1.3 SOA架构
1.4 微服务架构
英文: https://martinfowler.com/articles/microservices.htmlhttps://microservices.io/patterns/microservices.html中文: http://blog.cuicc.com/blog/2015/07/22/microservices
2. 如何实现微服务架构
2.1 微服务架构下的技术挑战
2.2 微服务技术栈选型
什么是Spring Cloud全家桶

Spring Cloud Alibaba版本选择

构建Maven项目的父pom
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.2</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>3.0.2</spring-boot.version><spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version><spring-cloud.version>2022.0.0</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build>
3. Alibaba 服务注册与发现组件Nacos实战
3.1 为什么需要注册中心
// 微服务之间通过 RestTemplate 调用, ip:port 写死 , 如果 ip 或者 port 变化呢?String url = "http://localhost:8020/order/findOrderByUserId/" + id ;R result = restTemplate . getForObject ( url , R . class );

3.2 注册中心选型
3.3 Nacos是什么
Nacos 优势
3.4 Nacos 注册中心架构

相关核心概念
核心功能
3.5 微服务整合Nacos注册中心实战
Nacos Server环境搭建
wget https :// github . com / alibaba / nacos / releases / download / 2.2.1 / nacos - server - 2.2.1 . tar . gz
# 默认鉴权插件用于生成用户登陆临时 accessToken 所使用的密钥,使用默认值有安全风险 (2.2.0.1 后无 默认值)nacos . core . auth . plugin . nacos . token . secret . key = aiDLyHlCgaXB08FL5zS3W6YQZssTVNScY
bin / startup . sh - m standalone

4) 访问nacos的管理端:http://ip:8848/nacos ,默认的用户名密码是 nacos/nacos
微服务提供者整合Nacos
<!-- nacos服务注册与发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
server:port: 8020spring:application:name: mall-order #微服务名称#配置nacos注册中心地址cloud:nacos:discovery:server-addr: nacos.mall.com:8848 #注册中心地址,建议用域名替换ip


微服务调用者整合Nacos
服务调用者可以通过 Nacos 的服务注册发现功能从 Nacos server 上获取到它要调用的服务。
以mall-user整合nacos为例
mall-user模块pom中引入nacos-client依赖
<!-- nacos服务注册与发现 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2)启动类上添加@EnableDiscoveryClient注解,此注解可以省略
3)yml配置文件中配置nacos注册中心地址
server:port: 8040spring:application:name: mall-user #微服务名称#配置nacos注册中心地址cloud:nacos:discovery:server-addr: nacos.mall.com:8848
4)启动mall-user服务,nacos管理端界面查看mall-user是否注册成功
整合RestTemplate+Spring Cloud LoadBalancer实现微服务调用
Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器实现,用来替代Ribbon。对于负载均衡机制,增加了ReactiveLoadBalancer接口,并提供了基于round-robin轮询和Random随机的实现。
官方文档:Cloud Native Applications
loadbalancer常用的配置:
spring:cloud:# 负载均衡配置loadbalancer:ribbon:#禁用ribbonenabled: falsecache:#启用本地缓存, 根据实际情况权衡enabled: true#缓存空间大小capacity: 1000#缓存的存活时间, 单位sttl: 2#caffeine缓存的配置, 需引入caffeine依赖caffeine:#initialCapacity初始的缓存空间大小,expireAfterWrite最后一次写入后经过固定时间过期spec: initialCapacity=500,expireAfterWrite=5shealth-check:#重新运行运行状况检查计划程序的时间间隔。interval: 25s#运行状况检查计划程序的初始延迟值initial-delay: 30retry: #需要引入Spring Retry依赖#该参数用来开启重试机制,默认是关闭enabled: true#切换实例的重试次数max-retries-on-next-service-instance: 2#对当前实例重试的次数max-retries-on-same-service-instance: 0#对所有的操作请求都进行重试retry-on-all-operations: true#Http响应码进行重试retryable-status-codes: 500,404,502
mall-user调用mall-order获取用户订单信息为例
1)引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
2)使用RestTemplate进行服务调用
给 RestTemplate 实例添加 @LoadBalanced 注解,开启 @LoadBalanced 与 loadbalancer 的集成
@Configuration
public class RestConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}}
3) mall-user中编写调用逻辑,调用mall-order服务
@RequestMapping(value = "/findOrderByUserId/{id}")
public R findOrderByUserId(@PathVariable("id") Integer id) {//利用@LoadBalanced,restTemplate需要添加@LoadBalanced注解String url = "http://mall-order/order/findOrderByUserId/"+id;R result = restTemplate.getForObject(url,R.class);return result;
}
测试:http://localhost:8040/user/findOrderByUserId/1,返回数据:
3.6 Nacos注册中心常用配置
服务分级存储模型
注册中心的核心数据是服务的名字和它对应的网络地址,当服务注册了多个实例时,我们需要对不 健康的实例进行过滤或者针对实例的⼀些特征进行流量的分配,那么就需要在实例上存储⼀些例如 健康状态、权重等属性。随着服务规模的扩大,渐渐的又需要在整个服务级别设定⼀些权限规则、 以及对所有实例都生效的⼀些开关,于是在服务级别又会设立⼀些属性。再往后,我们又发现单个 服务的实例又会有划分为多个子集的需求,例如⼀个服务是多机房部署的,那么可能需要对每个机 房的实例做不同的配置,这样又需要在服务和实例之间再设定⼀个数据级别。
Nacos 在经过内部多年生 产经验后提炼出的数据模型,则是⼀种服务-集群-实例的三层模型。这样基本可以满足 服务在所有场景下的数据存储和管理。
集群配置
在原有配置加入以下配置
spring:application:name: mall-order #微服务名称#配置nacos注册中心地址cloud:nacos:discovery:server-addr: nacos.mall.com:8848cluster-name: SH
案例:跨集群调用优先本地集群的场景实现
利用cluster-name可以实现跨集群调用时,优先选择本地集群的实例,本地集群不可访问时,再去访问其他集群。
下面是Ribbon的NacosRule实现的负载均衡算法,就是利用了cluster-name实现了优先调用本地集群实例。
LoadBalancer默认情况下使用的ReactiveLoadBalancer实现是RoundRobinLoadBalancer。要切换到不同的实现,无论是针对所选服务还是所有服务,您都可以使用自定义LoadBalancer配置机制。
# 注意: 不要用@Configuration修饰public class CustomLoadBalancerConfiguration {@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory,NacosDiscoveryProperties nacosDiscoveryProperties){String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);return new NacosLoadBalancer(loadBalancerClientFactory.getLazyProvider(name,ServiceInstanceListSupplier.class),name,nacosDiscoveryProperties);}}
在启动类上添加@LoadBalancerClient注解
@SpringBootApplication@LoadBalancerClient(value = "mall-order", configuration = CustomLoadBalancerConfiguration.class)public class MallUserApplication {public static void main(String[] args) {SpringApplication.run(MallUserApplication.class, args);}}
服务逻辑隔离
Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是DEFAULT_GROUP。
Namespace 隔离设计
命名空间(Namespace)用于进行租户(用户)粒度的隔离,Namespace 的常用场景之一是不同环境的隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
修改yml配置
spring:application:name: mall-user #微服务名称cloud:nacos:discovery:server-addr: 127.0.0.1:8848 #配置nacos注册中心地址namespace: bc50d386-8870-4a26-8803-0187486c57be # dev 开发环境
启动mall-user,进入nacos控制台可以看到mall-user注册成功,所属namespace是dev
测试:http://localhost:8040/user/findOrderByUserId/1,报错
原因:mall-order和mall-user使用了不同的namespace,导致服务隔离,mall-user无法发现可用的mall-order服务。
group服务分组
不同的服务可以归类到同一分组,group也可以起到服务隔离的作用。yml中可以通过spring.cloud.nacos.discovery.group参数配置。group更多应用场景是配置分组。
临时实例和持久化实例
在定义上区分临时实例和持久化 实例的关键是健康检查的方式。临时实例使用客户端上报模式,而持久化实例使用服务端反向探测模式。临时实例需要能够自动摘除不健康实例,而且无需持久化存储实例。持久化实例使用服务端探测的健康检查方式,因为客户端不会上报心跳, 所以不能自动摘除下线的实例。
在大中型的公司里,这两种类型的服务往往都有。⼀些基础的组件例如数据库、缓存等,这些往往不能上报心跳,这种类型的服务在注册时,就需要作为持久化实例注册。而上层的业务服务,例如 微服务,服务的 Provider 端支持添加汇报心跳的逻辑,此时就可以使用动态服务的注册方式。
Nacos 1.x 中持久化及非 持久化的属性是作为实例的⼀个元数据进行存储和识别。Nacos 2.x 中继续沿用了持久化及非持久化的设定,但是有了⼀些调整。在 Nacos2.0 中将是否持久化的数据抽象至服务级别, 且不再允许⼀个服务同时存在持久化实例和非持久化实例,实例的持久化属性继承自服务的持久化属性。
# 持久化实例 spring.cloud.nacos.discovery.ephemeral: false
nacos开启权限认证
Authorization
nacos server端 conf/application.properties添加如下配置
# 开启认证nacos.core.auth.enabled=true# 配置自定义身份识别的key(不可为空)和value(不可为空)#这两个属性是auth的白名单,用于标识来自其他服务器的请求。具体实现见com.alibaba.nacos.core.auth.AuthFilternacos.core.auth.server.identity.key=authKeynacos.core.auth.server.identity.value=nacosSecurty
微服务端 application.yml中添加如下配置
spring:application:name: mall-order #微服务名称#配置nacos注册中心地址cloud:nacos:discovery:server-addr: nacos.mall.com:8848username: nacospassword: nacos
如果没有配置username,password,微服务端启动会抛出如下错误:
3.7 Nacos集群搭建
官网文档: 集群部署说明
集群部署架构图
因此开源的时候推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面
http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。
http://SLB:port/openAPI 挂载SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),直连SLB即可,下面挂server真实ip,可读性不好。
http://nacos.com:port/openAPI 域名 + SLB模式(内网SLB,不可暴露到公网,以免带来安全风险),可读性好,而且换ip方便,推荐模式
端口 | 与主端口的偏移量 | 描述 |
8848 | 0 | 主端口,客户端、控制台及OpenAPI所使用的HTTP端口 |
9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
7848 | -1000 | Jraft请求服务端端口,用于处理服务端间的Raft相关请求 |
使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。 9849和7848端口为服务端之间的通信端口,请勿暴露到外部网络环境和客户端测。
三节点集群搭建
1)环境准备
- 安装好 JDK,需要 1.8 及其以上版本
- 建议: 2核 CPU / 4G 内存 及其以上
- 建议: 生产环境 3 个节点 及其以上
# 准备三台centos7服务器
192.168.65.174
192.168.65.192
192.168.65.204
- 准备好nacos安装包
2)配置集群配置文件
在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip:port。
mv conf/cluster.conf.example conf/cluster.conf
2 vim conf/cluster.conf
3
4 # ip:port
5 192.168.65.174:8848
6 192.168.65.192:8848
7 192.168.65.204:8848
注意:不要使用localhost或127.0.0.1,针对多网卡环境,nacos可以指定网卡或ip
1 #多网卡选择
2 #ip-address参数可以直接设置nacos的ip
3 #该参数设置后,将会使用这个IP去cluster.conf里进行匹配,请确保这个IP的值在cluster.conf里是存在
的
4 nacos.inetutils.ip-address=10.11.105.155
5
6 #use-only-site-local-interfaces参数可以让nacos使用局域网ip,这个在nacos部署的机器有多网卡时
很有用,可以让nacos选择局域网网卡
7 nacos.inetutils.use-only-site-local-interfaces=true
8
9 #ignored-interfaces支持网卡数组,可以让nacos忽略多个网卡
10 nacos.inetutils.ignored-interfaces[0]=eth0
11 nacos.inetutils.ignored-interfaces[1]=eth1
12
13 #preferred-networks参数可以让nacos优先选择匹配的ip,支持正则匹配和前缀匹配
14 nacos.inetutils.preferred-networks[0]=30.5.124.
15 nacos.inetutils.preferred-networks[0]=30.5.124.(25[0-5]|2[0-4]\\d|((1d{2})|([1-9]?
\\d))),30.5.124.(25[0-5]|2[0-4]\\d|((1d{2})|([1-9]?\\d)))
3)开启默认鉴权插件
修改conf目录下的application.properties文件
1 nacos.core.auth.enabled=true
2 nacos.core.auth.system.type=nacos
3 nacos.core.auth.plugin.nacos.token.secret.key=${自定义,保证所有节点一致}
4 nacos.core.auth.server.identity.key=${自定义,保证所有节点一致}
5 nacos.core.auth.server.identity.value=${自定义,保证所有节点一致}
4)配置数据源
使用外置mysql数据源,生产使用建议至少主备模式
4.1)初始化 MySQL 数据库
sql脚本:https://github.com/alibaba/nacos/blob/2.2.1/distribution/conf/mysql-schema.sql
4.2)修改application.properties配置
spring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://192.168.65.174:3306/nacos_devtest?
characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUni
code=true&useSSL=false&serverTimezone=UTCdb.user.0=rootdb.password.0=root
5) 分别启动三个nacos节点
以192.168.65.204为例,进入nacos目录,启动nacos
bin/startup.sh
6) 访问nacos管理界面
登录http://192.168.65.204:8848/nacos,用户名和密码都是nacos
微服务yml中配置
spring:application:name: mall-user #微服务名称#配置nacos注册中心地址cloud:nacos:discovery:server-addr: 192.168.65.174:8848,192.168.65.192:8848,192.168.65.204:8848username: nacospassword: nacos
Nginx配置负载均衡
使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。 9849和7848端口为服务端之间的通信端口,请勿暴露到外部网络环境和客户端测。
1)准备nginx环境
1.1 )如果安装了nginx,先检查nginx是否有stream模块,输出中包含:--with-stream
nginx -V
1.2) 安装nginx
#安装依赖包yum -y install gcc gcc-c++ autoconf automakeyum -y install zlib zlib-devel openssl openssl-devel pcre-devel# 下载nginxwget https://nginx.org/download/nginx-1.18.0.tar.gztar -zxvf nginx-1.18.0.tar.gzcd nginx-1.18.0#编译nginx 如果使用 nginx 的 stream 功能,在编译时一定要加上 “--with-stream”./configure --with-streammake && make install#安装后nginx默认路径/usr/local/nginx
2)配置http模块
在nginx的http下面配置http协议相关的地址和端口:
http {# nacos服务器http相关地址和端口upstream nacos-server {server 192.168.65.174:8848;server 192.168.65.192:8848;server 192.168.65.204:8848;}server {listen 8848;location / {proxy_pass http://nacos-server/;}}}
3)配置grpc
需要nginx有stream模块支持
# nacos服务器grpc相关地址和端口,需要nginx已经有stream模块# stream块用于做TCP转发stream {upstream nacos-server-grpc {server 192.168.65.174:9848;server 192.168.65.192:9848;server 192.168.65.204:9848;}server {listen 9848;proxy_pass nacos-server-grpc;}}
4) 启动nginx,然后就可以正常使用了。
sbin/nginx -c conf/nginx.conf
微服务yml中配置
spring:application:name: mall-user #微服务名称#配置nacos注册中心地址cloud:nacos:discovery:server-addr: nacos.mall.com:8848 #nacos.mall.com 需建立和nginx ip的域名映射username: nacospassword: nacos
相关文章:

微服务-微服务Alibaba-Nacos注册中心实现
1. 系统架构的演变 俗话说, 没有最好的架构,只有最合适的架构。 微服务架构也是随着信息产业的发展而出现的最有普 遍适用性的一套架构模式。通常来说,我们认为架构发展历史经历了这样一个过程:单体架构——> 垂直架构 ——&g…...

多符号表达式的共同子表达式提取教程
生成的符号表达式,可能会存在过于冗长的问题,且多个符号表达式中,有可能存在相同的计算部分,如果不进行处理,计算过程中会导致某些算式计算多次,从而影响计算效率。 那么多个符号表达式生成函数时…...

Java 反射获取属性名、属性类型、属性值、判断属性类型
1.代码 /*** 通过反射获取对象属性名、属性类型、属性值** param t 需要反射的对象* author hcx*/public static <T> void reflect(T t){// 获取所有属性// getDeclaredFields 不包含父类,包含私有属性// getFields 包含父类属性Field[] fields t.getClass(…...

Docker私有仓库搭建
目录 1.registry私有仓库 拉取registry镜像 修改docker配置文件并重启 运行registry容器 修改想要上传的镜像的标签并上传验证 再另一台主机上获取此镜像 浏览器验证 2.Docker--harbor私有仓库部署与管理 什么是Harbor Harbor的特性 Harbor的构成 Harbor部署 准备…...

C语言第十三弹---VS使用调试技巧
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 VS调试技巧 1、什么是bug 2、什么是调试(debug)? 3、Debug和Release编辑 4、VS调试快捷键 4.1、环境准备 4.2、调试…...

AST反混淆实战-jsjiamiv7最高配置
js加密混淆网站 https://www.jsjiami.com/一、混淆demo生成 01 打开目标网址 https://www.jsjiami.com/ 02 按照顺序加密混淆二、混淆前后demo 混淆前的源码 (function(w, d) { w.update "2023年01月17日05:34:29更新"; d.info "本站历时1年半研发的新版本V7…...

colorThief+vite+react使用方法
官网: Color Thief npm i --save colorthief 第一种,import载入图片 经过尝试,在vite中,要引入.mjs版本 import ColorThief from colorthief/dist/color-thief.mjs 第一种,通过import载入图片 import aa from /assets/123.jpgconst [resultColor,setResultColor]useState() …...

Hive(15)中使用sum() over()实现累积求和和滑动求和
目的: 三个常用的排序函数row_number(),rank()和dense_rank()。这三个函数需要配合开窗函数over()来实现排序功能。但over()的用法远不止于此,本文咱们来介绍如何实现累计求和和滑动求和。 1、数据介绍 三列数据,分别是员工的姓名、月份和…...

2024年Java搭建面试题
2024年Java实战面试题(北京)_java 5 年 面试-CSDN博客 1、搭建docker容器 # 安装依赖的环境 yum -y install yum-utils device-mapper-persistent-data lvm2 # 设置镜像源为阿里 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/lin…...

二维数组的学习
前言 在前面我们学习了一维数组,但是有的问题需要用二位数组来解决。 二维数组常称为矩阵,把二维数组写成行和列的排列形式,可以有助于形象化的理解二维数组的逻辑结构。 一、二维数组的定义 二维数组定义的一般格式: 数据类型 数…...

Java集合(List集合)
什么是集合? 什么是集合?集合就是“由若干个确定的元素所构成的整体”,在程序中,一般代表保存 若干个元素(数据)的某种容器类。 在Java中,如果一个Java对象可以在内部持有(保存&…...

7、Json文件的操作总结【robot framework】
1、JSONLibrary简介 Robot Framework 是一种通用的自动化测试框架,它支持使用关键字驱动的测试,并且易于学习和使用。Robot Framework 提供了丰富的标准库,而 JSONLibrary 就是其中之一,用于处理 JSON 数据。 安装 JSONLibrary 在…...

python 循环解压 解压多重压缩包
在实际数据中,经常会有压缩包套压缩包的情况,并且有可能出现“zip”压缩包下面套“tar”的可能。 你可以运行后面的代码,来完成自动解压。代码会不断检查folder_a_path 文件夹下是否还有压缩包。目前支持zip、rar、tar、7z等四种格式的压缩文…...

基于C#制作一个连连看小游戏
基于C#制作一个连连看小游戏,实现:难易度选择、关卡选择、倒计时进度条、得分计算、音效播放等功能。 目录 引言游戏规则开发环境准备游戏界面设计游戏逻辑实现图片加载与显示鼠标事件处理游戏优化与扩展添加关卡与难度选择说明</...

Android-System 根据包名查找已安装应用apk方法
1、根据包名查找应用的安装路径 dumpsys package packageName | grep Path 例如: kona:/ # dumpsys package com.yw_pt.oshnoh | grep PathcodePath/data/app/com.yw_pt.oshnoh-N4rPqGh58weRjMpA1q3evwresourcePath/data/app/com.yw_pt.oshnoh-N4rPqGh58weRjMpA1q3…...

洛谷-P4124题-手机号码-Java
题目 题目链接: https://www.luogu.com.cn/problem/P4124 分析 给定两个长度为11位的数字,代表两个区间 [L,R] 需要编写程序来计算出,这两个区间内满足要求的数字个数。这样的题一般来说就是数位dp题。首先我们可以根据容斥原理 [0,R]中满…...

仅使用 Python 创建的 Web 应用程序(前端版本)第08章_商品详细
在本章中,我们将实现一个产品详细信息页面。 完成后的图像如下。 Model、MockDB、Service都是在产品列表页实现的,所以创建步骤如下。 No分类内容1Page定义PageId并创建继承自BasePage的页面类2Application将页面 ID 和页面类对添加到 MultiPageApp 的页面中Page:定义PageI…...

Stable Diffusion 长视频真人动画风格互转
Stable Diffusion Temporal-Kit和EbSynth 从娱乐到商用 1. Temporal Kit 和 EbSynth1.1 提取关键帧1.2 关键帧风格迁移1.3 生成序列帧2. 真人转卡通3. 卡通转真人4. 编辑技巧5. ControlNet + TemporalNet + 达芬奇Fusion6. Rerender A Video7. DiffSynth-Studio基于SD的风格化…...

精要图示:园区金融数字化服务蓝图,以园区为支点推动信贷业务增长
作为企业集聚地,园区已然成为银行业夯实客群基础的重要切口,各大行陆续围绕园区场景创新金融产品,以期抢跑园区金融新赛道、把握新增量。 启信慧眼首推一站式【园区金融】数字化服务方案,该方案同时支持启信天元私有化部署&#x…...

2024 中国(南京)国际口腔设备器械博览会
2024 中国(南京)国际口腔设备器械博览会 时间:2024 年 7 月 18-20 日 地点:南京国际展览中心 WeChat_20230512134641 主办单位: 南京民营口腔医疗协会 北京铭曼国际展览有限公司 承办单位: 北京铭曼国际展览有限公司 展会介绍 随…...

【MyBatis】快速入门MyBatis(保姆式教学),你值得一看
文章目录 📄前言一. Mybatis简介✈️1. 什么是Mybatis🚀2. 为什么使用Mybatis 二. Mybatis快速入门🍆1. mybatis使用前准备1.1 创建springboot项目并引入相关依赖1.2 在 application.ym中进行数据源的配置1.3 创建数据表,准备表数…...

git pull代码时候报错:error: cannot open .git/FETCH_HEAD: Permission denied
git pull代码时候报错: error: cannot open .git/FETCH_HEAD: Permission denied 原因: 当前登录用户没有修改目录的权限。 解决办法: 修改当前目录权限 1. whoami 查看当前登录用户 xxx$ whoami 假设上边查询登陆账号为:csd…...

shell - 正则表达式和grep命令和sed命令
一.正则表达式概述 1.正则表达式定义 1.1 定义 使用字符串描述、匹配一系列符合某个规则的字符串 1.2 了解 普通字符: 大小写字母、数字、标点符号及一些其它符号元字符: 在正则表达式中具有特殊意义的专用字符 1.3 层次分类 基础正则表达式扩展正…...

datawhale 大模型学习 第十二章-大模型环境影响
环境影响概述 气候变化:大语言模型(LLM)的训练和运行需要大量计算资源,导致显著的能源消耗和温室气体排放,加剧气候变化。能源消耗:训练LLM的计算过程消耗大量电力,间接增加了化石燃料的使用&a…...

Qt WebEngine模块使用(开发环境安装和程序开发)
一、Qt WebEngine Qt WebEngine_hitzsf的博客-CSDN博客 Qt WebEngine模块提供了一个Web浏览器引擎,可以轻松地将万维网上的内容嵌入到没有本机Web引擎的平台上的Qt应用程序中。Qt WebEngine提供了用于渲染HTML,XHTML和SVG文档的C 类和QML类型ÿ…...

网络体系结构 和网络原理之UDP和TCP
目录 网络分层 一. 应用层 http协议 二. 传输层 1. 介绍 2.UDP协议 (1)组成 (2)细节 3.TCP协议 (1)特性如下链接: (2)组成 (3)特点 三. 网络层 四. 数据链路层 1.介绍 2.以太网协议 3.mac地址和ip地址 五. 物理层 DNS 网络分层 一. 应用层 应用程序 现成的…...

将Android APP安装到sm8550 HDK的NVMe SSD
APP存储路径 在Android中,App在运行过程中主要访问的数据路径通常包括以下几个方面: 内部存储(Internal Storage):App会访问其私有的内部存储空间,这个空间通常位于: /data/data/<package…...

(Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
国家青藏高原科学数据中心下载中国1千米分辨率逐日全天候地表土壤水分数据集(2003-2022) 问题:数据在arcgis打开特别大,无法和矢量数据重合,没有设置地理坐标系 数据在网站上提供了投影信息,提示可以进行py…...

Linux:进度条的创建
目录 使用工具的简单介绍: \r : fflush : 倒计时的创建: 倒计时的工作原理: 进度条的创建: 不同场景下、打印任意长度的进度条: main .c procbor.c 测试效果: 使用工具…...

treeview
QML自定义一个TreeView,使用ListView递归 在 Qt5 的 QtQuick.Controls 2.x 中还没有 TreeView 这个控件(在 Qt6 中出了一个继承自 TableView 的 TreeView),而且 QtQuick.Controls 1.x 中的也需要配合 C model 来自定义,…...