SpringBoot + Spring Cloud Alibaba + Nacos实现服务管理

1、参考文档

Spring Cloud Alibaba参考文档 https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html
Spring Cloud Alibaba官方文档 https://github.com/alibaba/spring-cloud-alibaba/wiki/

2、引入 Alibaba 依赖

每个 SpringBoot 都有对应的 Spring Cloud 以及 Spring Cloud Alibaba 版本,为了避免依赖冲突,引入依赖前请查阅 版本说明。
以下是 SpringBoot 2.6.11 对应的版本依赖。
https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

<properties><spring.boot.version>2.6.11</spring.boot.version><spring.cloud.version>2021.0.4</spring.cloud.version><spring.cloud.alibaba.version>2021.0.4.0</spring.cloud.alibaba.version>
</properties><dependencyManagement><dependencies><!-- spring boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring.boot.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring cloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring.cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- spring cloud alibaba --><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>

依赖引入后,若无爆红,terminal 执行命令:

mvn clean install

有 finish 提示代表项目依赖成功引入。

回到顶部

3、启动 Nacos 服务

Nacos 是动态的服务注册与发现、配置管理平台,想详细了解 Nacos 请查阅 Nacos 控制台手册,这里粗略地给出压缩包方式的安装步骤。

3.1、下载

压缩包下载地址:https://github.com/alibaba/nacos/releases。

选择 .zip 后缀文件进行下载,下载完成后解压:

在这里插入图片描述

3.2、启动

解压完成后, 进入 bin 目录, cmd 执行命令:

  • ​Linux/Unix/Mac:sh startup.sh -m standalone,
  • 如果是 ubuntu 系统或提示报错,执行bash startup.sh -m standalone (standalone 代表着单机模式运行,非集群模式)。
  • Windows: startup.cmd -m standalone

3.3、访问

启动成功访问地址:http://localhost:8848/nacos
配置中心界面如下图:
在这里插入图片描述到这里 Nacos 启动步骤结束。

4、创建 nacos-provider 服务提供者

在上文讲到 nacos 有服务发现的功能,在这里需要两个角色

nacos-provider: 注册进入 nacos-server, 对外暴露服务
nacos-consumer: 注册进入 nacos-server, 调用 nacos-provider的服务。

4.1、引入依赖

首先创建 nacos-provider模块,由于使用了多模块聚合项目,这里直接添加spring-cloud-starter-alibaba-nacos-discovery 依赖:

<!-- nacos服务发现 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

4.2、配置 yml 文件

配置 yml 首先需要知道每个参数代表的含义,下面是配置列表:

配置项Key默认值说明
服务端地址spring.cloud.nacos.discovery.server-addrNacos Server
服务名spring.cloud.nacos.discovery.service${spring.application.name}注册的服务名
权重spring.cloud.nacos.discovery.weight1取值范围 1 到 100数值越大,权重越大
网卡名spring.cloud.nacos.discovery.network-interface当IP未配置时
注册的IP地址spring.cloud.nacos.discovery.ip优先级最高
注册的IP地址类型spring.cloud.nacos.discovery.ip-typeIPv4可以配置IPv4和IPv6两种类型,如果网卡同类型IP地址存在多个,希望制定特定网段地址,可使用spring.cloud.inetutils.preferred-networks配置筛选地址
注册的端口spring.cloud.nacos.discovery.port-1默认情况下不用配置,会自动探测
命名空间spring.cloud.nacos.discovery.namespace常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等
AccessKeyspring.cloud.nacos.discovery.access-key当要上阿里云时,阿里云上面的一个云账号名
SecretKeyspring.cloud.nacos.discovery.secret-key当要上阿里云时,阿里云上面的一个云账号密码
Metadataspring.cloud.nacos.discovery.metadata使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
日志文件名spring.cloud.nacos.discovery.log-name
集群spring.cloud.nacos.discovery.cluster-nameDEFAULTNacos集群名称
接入点spring.cloud.nacos.discovery.endpoint地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
是否集成Ribbonribbon.nacos.enabledtrue一般都设置成true即可
是否开启Nacos Watchspring.cloud.nacos.discovery.watch.enabledtrue可以设置成false来关闭 watch

接下来配置 yml 文件:

server:port: 9001
spring:application:## 指定服务名称,在nacos中的名字name: nacos-providercloud:nacos:discovery:# nacos的服务地址,nacos-server中IP地址:端口号server-addr: 127.0.0.1:8848
management:endpoints:web:exposure:## yml文件中存在特殊字符,必须用单引号包含,否则启动报错include: '*'

4.3、开启服务发现
在启动类添加@EnableDiscoveryClient开启服务发现的功能:

@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}}

4.4、编写测试接口
作为服务提供者,需要提供接口给服务消费者,下面是随意编写的测试接口:

@RestController
@RequestMapping("/nacos")
public class NacosController {@GetMapping("/test")public String test(){return "成功访问服务者接口";}
}

4.5、启动项目
项目启动成功后,访问 nacos控制台 -> 服务管理 -> 服务列表,可以看到 nacos-provider已成功注册进来:
在这里插入图片描述
5、创建 nacos-consumer 服务消费者
既然已经有了服务提供者,那么相应的就需要消费者去消费暴露出来的接口,nacos-consumer的创建步骤与nacos-provider类似。

5.1、引入依赖

<!-- nacos服务发现 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

5.2、配置 yml 文件

server:port: 9002
spring:application:name: nacos-consumercloud:nacos:discovery:# nacos的服务地址server-addr: 127.0.0.1:8848
management:endpoints:web:exposure:## yml文件中存在特殊字符,必须用单引号包含,否则启动报错include: '*'
#调用的微服务名称,这里指服务提供者
service-url:nacos-provider: http://nacos-provider

5.3、开启服务发现
同样在启动类添加@EnableDiscoveryClient开启服务发现:

@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}
}

5.4、编写测试接口
在 Spring Cloud Nacos 2021 以后就没有在默认使用 Ribbon 作为负载均衡器了,而且在Cloud官网中也推荐使用LoadBalancer 作为负载均衡器,对此先引入依赖:

引入 LoadBalancer依赖:

<!--loadbalancer负载均衡器-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency> 

创建RestTemplate,如下:

@Configuration
public class RestTemplateConfig {/*** 注入 RestTemplate* * @return*/
@Bean
public RestTemplate restTemplate(){return new RestTemplate();
}
``
编写接口调用 nacos-provider服务暴露出来的接口:
``
@RestController
@RequestMapping("/nacos")
public class NacosController {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate LoadBalancerClient loadBalancerClient;@Value("${service-url.nacos-provider}")private String serviceUrl;@GetMapping("/getMessage")public String test(){//使用 LoadBalanceClient 和 RestTemplate 结合的方式来访问ServiceInstance serviceInstance = loadBalancerClient.choose(serviceUrl);//调用 nacos-provider 的接口String url = String.format("http://%s:%s/nacos/test",serviceInstance.getHost(),serviceInstance.getPort());return restTemplate.getForObject(url,String.class);}
}

5.5、启动项目
启动 nacos-consumer服务,可以看得到服务提供者与服务消费者都已经注册进来:
在这里插入图片描述
接下来要做的事情是调用 nacos-consumer的接口,输入地址:

http://localhost:9002/nacos/getMessage:

在这里插入图片描述

成功调用 nacos-provider接口。

6、Nacos Config 服务配置中心

6.1、引入依赖

Nacos 不只有服务注册与发现的功能,还拥有配置管理的功能, 下面是配置管理的参数列表及代表的含义:

配置项Key默认值说明
服务端地址spring.cloud.nacos.config.server-addrNacos Server 启动监听的ip地址和端口
配置对应的DataId spring.cloud.nacos.config.name先取 prefix,再取 name,最后取 spring.application.name
配置对应的DataId spring.cloud.nacos.config.prefix先取 prefix,再取 name,最后取 spring.application.name
配置内容编码spring.cloud.nacos.config.encode读取的配置内容对应的编码
GROUPspring.cloud.nacos.config.groupDEFAULT_GROUP配置对应的组
文件扩展名spring.cloud.nacos.config.fileExtensionproperties配置项对应的文件扩展名,目前支持 properties 和 yaml(yml)
获取配置超时时间spring.cloud.nacos.config.timeout3000客户端获取配置的超时时间(毫秒)
接入点spring.cloud.nacos.config.endpoint地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
命名空间spring.cloud.nacos.config.namespace常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等
AccessKeyspring.cloud.nacos.config.accessKey当要上阿里云时,阿里云上面的一个云账号名
SecretKeyspring.cloud.nacos.config.secretKey当要上阿里云时,阿里云上面的一个云账号密码
Nacos Server 对应的 context pathspring.cloud.nacos.config.contextPathNacos Server 对外暴露的 context path
集群spring.cloud.nacos.config.clusterName配置成Nacos集群名称
共享配置spring.cloud.nacos.config.sharedDataids共享配置的 DataId, “,” 分割
共享配置动态刷新spring.cloud.nacos.config.refreshableDataids共享配置中需要动态刷新的 DataId, “,” 分割
自定义 Data Id 配置spring.cloud.nacos.config.extConfig属性是个集合,内部由 Config POJO 组成。Config 有 3 个属性,分别是 dataId, group 以及 refresh

同上面的步骤类似,这里首先要做的一步是引入依赖, 使用 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-nacos-config 的 starter:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

从 SpringCloud 2020 版本开始bootstrap 文件便失效了,需要手动导入相应的依赖:

<!-- bootstrap 文件生效 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

bootstrap.properties/yml文件优先级高于 application.properties/yml。

6.2、配置 yml 文件
在 bootstrap.yml添加以下配置:

server:port: 9003spring:application:name: nacos-config# 当前环境,这个和dataId有关-> ${prefix}-${spring.profiles.active}.${file-extension}profiles:active: devcloud:nacos:config:# nacos的地址,作为配置中心server-addr: 127.0.0.1:8848## 配置内容的数据格式,目前只支持 properties 和 yaml 类型,这个和dataId有关-> ${prefix}-${spring.profiles.active}.${file-extension}file-extension: properties
management:endpoints:web:exposure:# yml文件中存在特殊字符,必须用单引号包含,否则启动报错include: '*'

6.3、dataId 的含义
dataId 是一个配置的唯一标识,格式如下:

${prefix}-${spring.profiles.active}.${file-extension}

prefix:前缀,默认是spring.cloud.nacos.config.prefix的值,再是 spring.cloud.nacos.config.name的值, 最后是 spring.application.name的值。
spring.profiles.active: 即为当前环境对应的 profile。当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}。
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
6.4、Nacos 添加配置
在 Nacos 中 添加一个 user.age配置,如下图:
在这里插入图片描述

填写完后点击发布保存配置,如下图:
在这里插入图片描述

6.5、获取 Nacos 配置
新建一个 entity 用于接收配置:

@Component
public class ConfigUser {@Value("${user.age}")private Integer age;public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

新建一个 controller, 用于测试:

@RestController
@RequestMapping("/config")
public class NacosConfigController {@Autowiredprivate ConfigUser configUser;@GetMapping("/test")public String test() {return "current user age is:" + configUser.getAge();}
}

启动项目,访问 http://localhost:9003/config/test 接口,成功读取到配置信息:
在这里插入图片描述
6.6、动态刷新配置
我们肯定不想每次配置完都重启项目,想要实现动态刷新需要添加注解@RefreshScope,将注解标注在对应的类上,如下:

@Component
@RefreshScope
public class ConfigUser {@Value("${user.age}")private Integer age;public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

重启项目完毕,修改 Nacos 中的 user.age=20,然后访问接口:
在这里插入图片描述

执行结果
在这里插入图片描述
发现配置自动更新了。6.7、多环境隔离(NameSpace)
正常的业务开发分为以下三个环境:
···
dev:本地开发环境
test:测试环境
prod:生产环境
···
虽然 dataId能够唯一的区分每一个配置文件,但是当微服务配置多了,很难查找每个环境的配置,因此有了 NameSpace即命名空间来隔离每个环境的配置。

我们创建了以下三个命名空间:
在这里插入图片描述

注意:上图中的命名空间ID是系统自动生成的唯一 ID,后续指定不同的Namespace 就用这个 ID。

Nacos 默认的命名空间是 public, 在 test命名空间添加 user.age=30的配置,如下图:

image-20230710152838546
bootstrap.yml 修改配置如下:

spring:application:name: nacos-config# 当前环境,这个和dataId有关-> ${prefix}-${spring.profiles.active}.${file-extension}profiles:active: testcloud:nacos:config:# nacos的地址,作为配置中心server-addr: 127.0.0.1:8848# 配置内容的数据格式,目前只支持 properties 和 yaml 类型,这个和dataId有关-> ${prefix}-${spring.profiles.active}.${file-extension}file-extension: properties# 命名空间IDnamespace: f633bb70-eb73-4944-b752-ad8f03881181

配置完毕,重启项目访问 http://localhost:9003/config/test 接口,如下:
在这里插入图片描述
成功读取配置。

6.8、不同业务隔离(Group)
不同的微服务可能有着不同的配置,例如商品系统与订单系统通过分库分别访问不同的数据库,意味着有不同的数据库配置,此时就需要根据Group即组进行配置的区分,
例如Goods_Group、Order_Group, 默认的是 DEFAULT_GROUP。

在 nacos添加配置user.age=40,命名空间为test, 分组为Goods_Group:
在这里插入图片描述
在 bootstrap.yml指定分组,配置如下:

spring:application:name: nacos-config# 当前环境,这个和dataId有关-> ${prefix}-${spring.profiles.active}.${file-extension}profiles:active: testcloud:nacos:config:# nacos的地址,作为配置中心server-addr: 127.0.0.1:8848# 配置内容的数据格式,目前只支持 properties 和 yaml 类型,这个和dataId有关-> ${prefix}-${spring.profiles.active}.${file-extension}file-extension: properties# 指定命名空间IDnamespace: f633bb70-eb73-4944-b752-ad8f03881181# 指定分组group: Goods_Group

重启项目后再次访问 http://localhost:9003/config/test 接口,如下:
在这里插入图片描述
读取配置成功。

6.9、共享配置
当微服务数量增多,一般会有相同的配置,那如何把相同的配置提取出来实现共享呢?

在 Nacos添加 share-config1.properties及share-config2-properties配置,如下:
在这里插入图片描述
注意:dataId的后缀一定要为properties或 yml。

share-config1.properties的配置为 user.name=lin
share-config2.properties的配置为 user.age=50
新建module,命名为nacos-config-share,依赖同nacos-config一样。

bootstrap.yml配置如下:

server:port: 9004spring:application:name: nacos-config-sharecloud:nacos:config:# nacos的地址,作为配置中心server-addr: 127.0.0.1:8848## 共享配置,List集合,可以配置多个shared-configs:## dataId:配置文件的dataId,必须带有后缀- dataId: share-config1.properties## refresh:指定是否能够动态刷新,默认是falserefresh: true- dataId: share-config2.properties## 指定配置文件的分组,默认是DEFAULT_GROUPgroup: Goods_Group
management:endpoints:web:exposure:# yml文件中存在特殊字符,必须用单引号包含,否则启动报错include: '*'

可以看到:

通过 spring.cloud.nacos.config.shared-configs[n].data-id 来支持多个共享 Data Id 的配置。
通过 spring.cloud.nacos.config.shared-configs[n].group 来配置自定义 Data Id 所在的组,不明确配置的话,默认是 DEFAULT_GROUP。
通过 spring.cloud.nacos.config.shared-configs[n].refresh 来控制该Data Id在配置变更时,是否支持应用中动态刷新,默认false。
新建 entity,用于接收共享配置,如下:

@Component
@RefreshScope
public class ConfigUser {@Value("${user.name}")private String name;@Value("${user.age}")private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

新建controller,用于接收共享配置,如下:

@RestController
@RequestMapping("/config")
public class NacosConfigShareController {@Autowiredprivate ConfigUser configUser;@GetMapping("/test")public String test() {return "current user name is:" + configUser.getName() + " , and age is:" + configUser.getAge();}
}

启动项目,访问 http://localhost:9004/config/test, 如下:
在这里插入图片描述
成功访问到 share-config1.properties及 share-config2.properties的共享配置。

到这里 Nacos的基本用法介绍完毕,了解更多详细信息参考官方Nacos config文档。

参考文档:

https://github.com/alibaba/spring-cloud-alibaba/wiki/
https://juejin.cn/post/6990146025545531405#heading-31
https://developer.aliyun.com/article/1082538

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/213060.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Firefly-Linux] RK3568 Ubuntu固件分区详解

RK为了方便开发与产品定制&#xff0c;自己定义了一套固件的分区&#xff0c;这些分区信息存放在parameter.txt文件中&#xff0c;Firefly参考这个文件定义了自己的Ubuntu分区&#xff0c;文件为parameter-ubuntu.txt&#xff0c;存放于Linux_SDK的device/rockchip/rk356x目录下…

模电笔记。。。。

模电 2.8 蜂鸣器 按照蜂鸣器驱动方式分为有源蜂鸣器和无源蜂鸣器 有源的有自己的震荡电路&#xff0c;无源的要写代码控制。 里面有个线圈&#xff0c;相当于电感&#xff0c;储能&#xff0c;通直隔交。 蜂鸣器的参数&#xff1a;额定电压&#xff0c;工作电压&#xff0…

外贸辅助工具定制的价格范围,别被坑了哟!

随着全球化的不断发展&#xff0c;外贸已成为企业不可或缺的一部分。然而&#xff0c;在外贸过程中&#xff0c;企业往往会遇到各种问题&#xff0c;如语言障碍、文化差异、法规繁琐等&#xff0c;为了解决这些问题&#xff0c;许多企业选择定制外贸辅助工具。 但是&#xff0…

服务器数据恢复—ocfs2文件系统被格式化为其他文件系统如何恢复数据?

服务器故障&#xff1a; 由于工作人员的误操作&#xff0c;将Ext4文件系统误装入到存储中Ocfs2文件系统数据卷上&#xff0c;导致原Ocfs2文件系统被格式化为Ext4文件系统。 由于Ext4文件系统每隔几百兆就会写入文件系统的原始信息&#xff0c;原Ocfs2文件系统数据会遭受一定程度…

一个简单的postman设置断言,为何会难住一个工作5年的测试?

postman设置断言 作为一款接口测试工 具&#xff0c;postman需要对发送请求后返回的结果是否正确做验证&#xff0c;在postman中通过 tests页签做请求的验证&#xff0c;也称为断言。 postman设置断言的流程 1、在tests页签截取要对比的实际响应信息&#xff08;响应头、响应…

ArkTS快速入门

一、概述 ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者可以…

DOS 批处理 (一)

DOS 批处理 1. 批处理是什么&#xff1f;2. DOS和MS-DOS3. 各种操作系统shell的区别Shell 介绍图形用户界面&#xff08;GUI&#xff09;shell命令行界面&#xff08;CLI&#xff09;的 shell命令区别 1. 批处理是什么&#xff1f; 批处理(Batch)&#xff0c;也称为批处理脚本…

VisualStudio反汇编功能使用

VisualStudio反汇编功能使用 使用方法 到达断点时&#xff1a;CtrlK&#xff08;松开&#xff09;G&#xff08;后按&#xff09;唤出反汇编界面&#xff0c;就可以看到当前代码对应的汇编语言了 注意&#xff1a;进入反汇编窗口后可以F10单次调试一条汇编指令 其他&#…

机器学习第15天:GBDT模型

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​​ 文章目录 GBDT模型介绍 Boosting 残差 GBDT的缺点 python代码实现 代码 模型参数解释 结语 GBDT模型介绍 GBDT&#xff08;Gradient Boos…

【深度学习】AlexNet网络实现猫狗分类

【深度学习】AlexNet网络实现猫狗分类 AlexNet简介 AlexNet是一种卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;模型&#xff0c;它在2012年的ImageNet图像分类挑战赛中取得了重大突破&#xff0c;引发了深度学习在计算机视觉领域的热潮…

前端学习系列之CSS

目录 CSS 简介 发展史 优势 基本语法 引用方式 内部样式 行内样式 外部样式 选择器 id选择器 class选择器 标签选择器 子代选择器 后代选择器 相邻兄弟选择器 后续兄弟选择器 交集选择器 并集选择器 通配符选择器 伪类选择器 属性选择器 CSS基本属性 优…

基于ssm家庭理财系统源码和论文

基于ssm家庭理财系统源码和论文743 idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 环境&#xff1a; jdk8 tomcat8.5 开发技术 ssm 摘要 随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff…

机器人刚性碰撞任务的阻抗控制性能

问题描述 对于机器人刚性碰撞任务&#xff0c;阻抗控制可以有效地提高机器人的适应性和稳定性。 在刚性碰撞任务中&#xff0c;机器人在接触外部物体时需要快速适应并调整自身的运动轨迹和速度&#xff0c;以实现精确的操控和稳定的交互。阻抗控制可以通过调整机器人的阻抗参…

cuda lib 线程安全的要义

1, 概述 cuda lib 线程安全的几个多线程的情景&#xff1a; 单卡多线程&#xff1b; 多卡多线程-每卡单线程&#xff1b; 多卡多线程-每卡多线程&#xff1b; 需要考虑的问题&#xff1a; 每个 cublasHandle_t 只能有一个stream么&#xff1f; 每个cusolverHandle_t 只能有一…

AR + 通信,虚实结合让工作协同从线上到「现场」

在数字经济无所不在的当下&#xff0c;千行百业都与数智化办公接轨并因其实现转型升级。关注【融云 RongCloud】&#xff0c;了解协同办公平台更多干货。 升级的背后&#xff0c;是利用技术把工作用更自然的方式连接起来&#xff0c;让整个工作流协同更顺、体验更好。 而其中…

应用架构——集群、分布式、微服务的概念及异同

一、什么是集群&#xff1f; 集群是指将多台服务器集中在一起&#xff0c; 每台服务器都实现相同的业务&#xff0c;做相同的事&#xff1b;但是每台服务器并不是缺 一不可&#xff0c;存在的主要作用是缓解并发能力和单点故障转移问题。 集群主要具有以下特征&#xff1a; …

042:el-table表格表头自定义高度(亲测好用)

第042个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

python3.5安装教程及环境配置,python3.7.2安装与配置

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python3.5安装教程及环境配置&#xff0c;python3.7.2安装与配置&#xff0c;现在让我们一起来看看吧&#xff01; python 从爬虫开始&#xff08;一&#xff09; Python 简介 首先简介一下Python和爬虫的关系与概念&am…

【iOS】网络请求GET与POST

【iOS】网络请求GET与POST 前沿一. GET与POST的共同点二. GET与POST的不同点三. 实现方式总结 前沿 HTTP定义了与服务器交互的不同方法&#xff0c;最基本的方法有4种&#xff0c;分别是GET&#xff0c;POST&#xff0c;PUT&#xff0c;DELETE。URL全称是资源描述符&#xff0…

护眼灯有效果吗?考研必备护眼台灯推荐

据统计&#xff0c;中国人口的近视率约为10%至20%。 国家卫健委发布的中国首份眼健康白皮书显示&#xff0c;我国小学生近视率为47.2%&#xff0c;初中生近视率为75.8%&#xff0c;大学生近视率超过90%。据世界卫生组织统计数据显示&#xff0c;目前全球约有14亿近视人口&#…