Nacos详解

nacos官方文档:https://nacos.io/

一、什么是nacos?

Nacos是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
nacos官方文档:https://nacos.io/
nacos主要有两个核心功能:
1.配置管理
2.服务管理:服务的注册与发现
本文主要围绕这两个核心功能进行描述

二、nacos管理实例下载

想要更好的了解nacos,我们需要先下载nacos管理实例。官方地址:https://nacos.io/download/release-history/。本文以2.3.0版本为例。

下载解压后nacos里有这些文件夹
在这里插入图片描述
nacos是用Java写的,所以可以看到在target目录下有一个jar包;
conf目录下就是它的配置文件,我们知道启动Java项目是需要一个端口号的,默认是8848,就配置在conf/application.properties文件里;
bin目录下是nacos的启动命令;
在windows系统,通常是通过cmd进入bin目录,执行startup.cmd命令,但这是以集群模式启动nacos,如果是以单机模式启动nacos,则执行startup.cmd -m standalone命令
单机模式启动nacos
启动完成nacos后,我们可以登录nacos管理页面,默认地址是http://localhost:8848/nacos,账号密码默认都是nacos。账号密码是可以自己配置的,后面会讲到。
登录成功后就是这样子:
在这里插入图片描述

三、nacos配置管理

本文主要讲的是在springcloud中如何集成使用nacos作为配置中,实现配置热部署

1、集成依赖

springcloud集成nacos需要的依赖:

<!--        配置中心来做配置管理--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.8.RELEASE</version></dependency>

Spring Cloud Alibaba和Spring Cloud和Spring Boot版本有依赖关系,具体参照官方文档:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

文中所用依赖版本:Spring Cloud Alibaba:2.2.8.RELEASE;Spring Cloud Version:Spring Cloud Hoxton.SR12; Spring Boot Version:2.3.12.RELEASE

2、配置管理

spring:# 注册服务的nameapplication:name: nacos-testprofiles:include: dev-db, dev-rediscloud:nacos:# nacos配置中心config:server-addr: localhost:8848 # 配置中心地址namespace: prod # 指定服务发现的命名空间group: gulimall-product # nacos配置中心分组,这里用来区分项目enabled: true # 开启nacos作为配置中心,默认为truefile-extension: yaml # 指定nacos中配置文件的后缀,只支持properties和yaml类型,默认properties  存疑:文档说是配置内容的数据格式,但我的实验结果是作为文件的后缀extension-configs[0]: # 指定拉取某个配置(可指定多个)data-id: common-dev.yaml # 没指定分组使用默认分组refresh: true # 指定动态刷新,必须有@RefreshScope注解和这个配置动态刷新才能生效file-extension: yaml# 指定nacos中配置文件的后缀,只支持properties和yaml类型,默认properties  存疑:文档说是配置内容的数据格式,但我的实验结果是作为文件的后缀group: gulimall-product # 指定分组shared-configs[0]:data-id: common1-dev.yaml # 没指定分组使用默认分组refresh: true # 指定动态刷新,必须有@RefreshScope注解和这个配置动态刷新才能生效file-extension: yaml# 指定nacos中配置文件的后缀,只支持properties和yaml类型,默认properties  存疑:文档说是配置内容的数据格式,但我的实验结果是作为文件的后缀

nacos作为配置中心,常用的配置如上所示。下面就来讲讲这些配置具体有什么用。
在这里插入图片描述
在nacos管理实例客户端中,我们新建一个配置,需要指定命名空间,分组(group),DataId;其中命名空间和分组都有默认的。
命名空间通常用来管理不同的环境,比如生产环境、测试环境;
分组通常用来管理不同的应用,分布式系统架构中,会拆分出各个职责的模块。可以用不同的分组来区分;
DataId则是这个空间分组下的唯一id
在 Nacos Spring Cloud 中,DataId的完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,通常配置在启动命令的jvm参数中。 注意:当 ​​**spring.profiles.active​ 为空时,对应的连接符 ​-​ 也将不存在,dataId 的拼接格式变成 ​${prefix}.${file-extension}**
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

我们使用nacos作为配置中心,其中一个原因就是nacos支持配置的热部署,也就是说不需要重启工程,配置也能更新。
我们可以通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新,在需要动态获取配置的类加上@RefreshScope 注解,即可实现配置自动更新;实际项目中,可以通过定义一个专门的bean来存放配置文件中的值,并提供get/set方法供获取,代码如下:

@Component
@RefreshScope
@Data
public class CommomConfig {@Value("${name}")private String name;@Value("${age}")private int age;@Value("${spring.datasource.username}")private String datasourceName;
}

nacos拉取多个配置

应用场景:分类存放配置,db、redis等等配置分开存放
使用spring.profiles.include: dev-db, dev-redis 配置,nacos会去拉去xxx-dev-db.yamlxxx-dev-redis.yaml的配置文件,xxx表示spring.application.name的值,dev前缀表示spring.profiles.active的值,不同环境需要配置不同的前缀。
nacos中还有其他方式可以拉取多个配置:
spring.cloud.nacos.config.shared-configs[0]= common-dev.yaml 指定额外拉取common-dev.yaml配置文件,configs[0]是个数组,可指定多个

spring.cloud.nacos.config.extension-configs[0]= common-dev.yaml 指定额外拉取common-dev.yaml配置文件,configs[0]是个数组,可指定多个
应用场景:获取多个工程共享的公共配置

extension-configs表示本应用特有的

shared-configs表示多个应用共享的

两者功能类似,选其一进行使用

优先级:

extension-configs[2] > extension-configs[1]> extension-configs[0]

shared-configs[2]> shared-configs[1] > shared-configs[0]
通过shared/extension方式拉取的配置叫从配置,主配值的优先级>从配置

配置的自动刷新及原理

主配置开启配置自动刷新:
spring.cloud.nacos.config.refresh=true (默认是true) 通过这个配置开启配置自动刷新
从配置开启配置自动刷新:
spring.cloud.nacos.config.extension-configs[0].refresh=true (默认是true) 通过这个配置开启配置自动刷新

不管是主配置还是从配置,只配置了注解后都不会自动刷新,需要在使用的类加上@RefreshScope注解

原理:如果配置中心的内容发生了变化,且spring.cloud.nacos.config.refresh的值是true,我们本地是能获取到配置文件最新的内容,保存到内存中,但是bean只能创建一次,在bean创建的时候已经有了旧的值,这时候bean的值并不会发生改变,为了让bean属性的值发生变化,就需要加上@RefreshScope注解,@RefreshScope注解是一个refresh的作用域,你的配置如果发生了变化,就会去重新生成一个bean,类似于多例bean,每次用都会新生成一个;@RefreshScope的作用域是refresh,每次刷新配置就会新生成一个bean。

四、nacos服务注册发现

使用springcloud进行服务注册和发现
依赖:

    <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.8.RELEASE</version></dependency>

配置nacos注册中心地址:
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
在启动类使用@EnableDiscoveryClient注解来开启服务注册。(不使用这个注解也能完成服注册)

使用RestTemplate + nacos完成服务注册与发现例子:
provider配置

spring.application.name=provider
spring.cloud.nacos.discovery.server-addr:127.0.0.1:8848

consume配置

spring.application.name=consume
spring.cloud.nacos.discovery.server-addr:127.0.0.1:8848

provider提供的接口

@RestController
public class TestNacosProvider {@GetMapping("/test")public String provider() {return "provider";}
}

consume去调用provider提供的接口

@RestController
public class TestNacosConsume {@Bean@LoadBalanced // @LoadBalanced应用负载均衡策略选择一个实例进行请求。直接使用服务名来发起请求,需要用@LoadBalanced注解修饰RestTemplate,// 无需关心服务实例的具体地址。Spring Cloud的Ribbon客户端会自动从注册中心获取服务实例列表,并使用负载均衡策略选择一个实例进行请求。private RestTemplate getRestTemplate() {return new RestTemplate();}@Autowiredpublic RestTemplate restTemplate;@GetMapping("/consume")public String consume() {return restTemplate.getForObject("http://provider/test", String.class);}
}

五、nacos管理页面的一些功能

临时实例与持久实例

spring.cloud.nacos.discovery.ephemeral=false # 设置实例为临时实例(默认值是true),值为false,则是持久实例,表示实例信息会持久化到磁盘中去

默认情况下,注册到nacos的实例都是临时实例,临时实例会通过客户端与服务端之间的心跳来保活,默认情况下,客户端每5s发送一次心跳。在服务端,超过15s没有收到客户端的心跳,那么就会把实例标记为不健康状态;如果超过30s没有收到客户端心跳,那么就会删除临时实例。对于持久实例,就算服务下线了,也不会删除。

临时实例与持久实例的区别:持久实例永远在线,临时实例当服务异常时就会在nacos中下线。

使用场景:消费端需要拿到下线服务的实例信息,则需要把该服务实例注册为持久实例

如果之前是临时实例,想修改为持久实例,配置了 spring.cloud.nacos.discovery.ephemeral=false后会报错:

Caused by: java.lang.reflect.UndeclaredThrowableException: nullat org.springframework.util.ReflectionUtils.rethrowRuntimeException(ReflectionUtils.java:147) ~[spring-core-5.2.15.RELEASE.jar:5.2.15.RELEASE]at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:82) ~[spring-cloud-starter-alibaba-nacos-discovery-2.2.8.RELEASE.jar:2.2.8.RELEASE]at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.register(AbstractAutoServiceRegistration.java:239) ~[spring-cloud-commons-2.2.9.RELEASE.jar:2.2.9.RELEASE]at com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration.register(NacosAutoServiceRegistration.java:78) ~[spring-cloud-starter-alibaba-nacos-discovery-2.2.8.RELEASE.jar:2.2.8.RELEASE]at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.start(AbstractAutoServiceRegistration.java:138) ~[spring-cloud-commons-2.2.9.RELEASE.jar:2.2.9.RELEASE]at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.bind(AbstractAutoServiceRegistration.java:101) ~[spring-cloud-commons-2.2.9.RELEASE.jar:2.2.9.RELEASE]at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:88) ~[spring-cloud-commons-2.2.9.RELEASE.jar:2.2.9.RELEASE]at org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.onApplicationEvent(AbstractAutoServiceRegistration.java:47) ~[spring-cloud-commons-2.2.9.RELEASE.jar:2.2.9.RELEASE]at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404) ~[spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361) ~[spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:46) ~[spring-boot-2.3.12.RELEASE.jar:2.3.12.RELEASE]at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182) ~[spring-context-5.2.15.RELEASE.jar:5.2.15.RELEASE]... 14 common frames omitted
Caused by: com.alibaba.nacos.api.exception.NacosException: failed to req API:/nacos/v1/ns/instance after all servers([localhost:8848]) tried: ErrCode:500, ErrMsg:caused: errCode: 400, errMsg: Current service DEFAULT_GROUP@@gulimall-product is ephemeral service, can&#39;t register persistent instance. ;at com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy.reqApi(NamingHttpClientProxy.java:451) ~[nacos-client-2.1.0.jar:na]at com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy.reqApi(NamingHttpClientProxy.java:392) ~[nacos-client-2.1.0.jar:na]at com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy.reqApi(NamingHttpClientProxy.java:387) ~[nacos-client-2.1.0.jar:na]at com.alibaba.nacos.client.naming.remote.http.NamingHttpClientProxy.registerService(NamingHttpClientProxy.java:166) ~[nacos-client-2.1.0.jar:na]at com.alibaba.nacos.client.naming.remote.NamingClientProxyDelegate.registerService(NamingClientProxyDelegate.java:94) ~[nacos-client-2.1.0.jar:na]at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:145) ~[nacos-client-2.1.0.jar:na]at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.register(NacosServiceRegistry.java:74) ~[spring-cloud-starter-alibaba-nacos-discovery-2.2.8.RELEASE.jar:2.2.8.RELEASE]... 27 common frames omitted

这是因为nacos不允许临时实例的服务注册为持久实例,要想修改为持久实例,需要将nacos文件naming_instance_metadata目录下的所有文件删除
在这里插入图片描述
之后重启工程就能成功
在这里插入图片描述
持久实例服务异常:
在这里插入图片描述

保护阈值

在使用过程中,我们可以设置一个0-1的一个比例,表示如果所有服务的实例中,健康实例的比重低于这个比重就会触发保护,一旦触发保护,在服务消费端侧就会把所有实例拉取下来,不管是否健康,这样就起到了保护的作用,因为正常来说消费端只会拿到健康实例,但是如果健康实例占总比例比较小了,那么就会导致所有流量都压到健康实例上,这样仅剩的几个健康实例也会被压垮,所以只要触发了保护,消费端就会拉取到所有实例,这样部分消费端仍然会访问到不健康的实例从而请求失败,但是也有一部分请求能访问到健康实例,达到保护的作用

保护阈值必须与持久化实例配合使用

NacosRule的使用

存在多个实例时,可以配置权重,不过我们在消费一个服务时,通常时通过ribbon来进行负载均衡的,所以默认情况下nacos配置的权重是起不到作用的,因为ribbon使用的是自己的负载均衡策略,如果想要用到nacos的权重,需要在消费端加入这个bean

@Bean
public IRule ribbonRule() {return new NacosRule();
}

这样就会用到nacos中配置的权重了

Cluster指定访问

一个服务下会有多个实例,在nacos中,可以将这些实例指定到不同的集群中,可以通过

spring.cloud.nacos.discovery.cluster-name=bj

这种方式来指定当前实例属于哪个集群,提供者和消费者都配置指定集群,当集群内所有实例都挂了,则消费者调用失败;

消费者没有配置指定集群,则按权重随机获取提供者

六、Nacos集群

以集群的方式部署nacos(以nacos-server-2.3.0版本为例)
我是在本地复制多份nacos实例,以不同端口起多个nacos实例
1、在nacos/conf目录下修改/新建 cluster.conf 文件,把nacos集群中所有节点的ip和port配置进去
127.20.10.2:8848
127.20.10.2:8858
127.20.10.2:8868

2、修改nacos实例端口号
在nacos/conf/目录下修改application.properties文件,将不同实例的端口号改成不一样的(在多台机器上部署就可以不用修改)
在这里插入图片描述

3、通过cmd进去nacos多个实例的nacos/bin/目录
分别运行:startup.cmd -p embedded 来启动多个节点

4、启动成功后,在nacos管理台页面可以看到:

上面集群部署中,我们是使用了startup.cmd -p embedded来启动nacos实例,如果只使用startup.cmd进行启动,会报错。

startup.cmd -p embedded表示使用内置数据源。如果想使用startup.cmd来进行启动,我们要配置自己的数据源

以mysql为例

1、在nacos/conf/目录下找到mysql-schema.sql文件,里面是nacos需要用到的表信息,执行该sql脚本,会创建出下面这些表
在这里插入图片描述
2、然后修改nacos/conf/目录下的application.properties文件

修改数据源信息。多个实例都需要修改,注意,集群里的nacos实例必须连同一个数据库

当我们配置了数据源后,在默认数据源的配置中心的配置信息都不见了,需要重新配置
在这里插入图片描述
3、修改完配置信息,就可以使用startup.cmd命令来启动nacos了

nacos集群搭建完成之后,我们的应用可以连接任意一个节点,或者可以配置多个节点

spring.cloud.nacos.discovery.server-addr:=localhost:8848, localhost:8858, localhost:8868

不过,在应用上指定多个节点,一旦nacos实例ip地址发生变化,那么就得修改,所以我们可以在nacos集群之上在搭一个nginx

1、先下载nginx,然后修改conf/nginx配置文件:

添加upstream

upstream nacos.cluster{server 127.20.10.2:8848server 127.20.10.2:8858server 127.20.10.2:8868}

添加location

location /nacos {proxy_pass http://nacos-cluster;}

2、启动nginx,访问http://localhost/nacos就可以访问到nacos管理台了,在应用中就只需要配置:

spring.cloud.nacos.discovery.server-addr=localhost:80/nacos

即可进行服务注册与发现

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

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

相关文章

数据结构--栈(图文)

栈是一种基本的抽象数据类型&#xff0c;具有后进先出的特点。在栈这种数据结构中&#xff0c;元素只能在一端进行插入和删除操作&#xff0c;这一端被称为栈顶&#xff08;Top&#xff09;&#xff0c;而另一端则称为栈底&#xff08;Bottom&#xff09;。 栈的概念及特点 栈…

springboot社区维修平台

设计技术&#xff1a; springboot、mysql、maven、前端vue 主要功能&#xff1a; 住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管理、在线沟通管理、举报信息管理、留言板管理、系统管理等功能模块。 管理员功能模块 管理员通过后台登录页面…

基于单片机和 Arduino 平台的六自由度可控机械手臂

摘 要 : 为了降低机械手臂的设计开发难度 &#xff0c; 并使之尽早地投入应用 &#xff0c; 设计一种基于单片机和 Arduino 平台的六自由度可控机械手臂 。提出六自由度可控机械手臂的控制方案&#xff0c; 给出机械手臂控制系统的结构框图 。 详细设计六自由度可控机械手臂…

Websocket在Java中的实践——自动注册端点

在《Websocket在Java中的实践——握手拦截器》中我们使用握手拦截器实现了路径解析的工作。这个过程略显复杂&#xff0c;因为路径解析这样比较底层的工作应该由框架来解决&#xff0c;而不应该交由开发者来做。本文介绍的自动注册端点的功能就可以很优雅的解决这个问题。 依赖…

[C++][设计模式][原型模式]详细讲解

1.动机 在软件系统中&#xff0c;经常面临这“某些结构复杂的对象”的创建工作&#xff1b;由于需求的变化&#xff0c;这些对象经常面临着剧烈的变化&#xff0c;但是它们却拥有比较稳定一致的接口如何应对这种变化&#xff1f;如何向“客户程序(使用这些对象的程序)”隔离出…

STM32HAL库--IIC实验(速记版)

STM32 的普通 IO 口模拟 IIC 时序&#xff0c;可实现与 EEPROM 外设双向通信。 IIC 简介 IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线&#xff0c;用于连接微控制器以及其外围设备。 IIC 是由数据线 SDA 和时钟线 SCL 构成的串行总线。 IIC …

在数据库领域是如何实现“多租户”的呢?

数据库多租技术介绍 随着云计算时代的到来&#xff0c;多租户的概念也逐渐广为人知。“多租户”使得租户之间可以共享物理资源&#xff0c;能够帮助用户节约硬件成本和运维成本&#xff0c;提高资源利用效率。同时&#xff0c;在实现的过程中&#xff0c;考虑到共享带来的安全…

three.js - matcap材质(MeshMatcapMaterial)

说一下matcap纹理 先总结&#xff1a;MeshMatcapMaterial材质&#xff0c;通过采样含有光照信息的贴图来模拟光照效果。这种材质特别适用于模拟静态光源下的光照&#xff0c;并且&#xff0c;因其简单性和快速性而被广泛应用于各种场景。但是&#xff0c;由于其性能考虑&#x…

系统思考—啤酒游戏经营决策沙盘

在日常的教学中&#xff0c;我们通过系统思考仿真演练深入探索决策背后的动因。例如&#xff0c;我经常教授的麻省理工学院研发的“啤酒游戏”和“人民航空策略模拟”&#xff0c;这些都是麻省理工MBA学生的必修课。此外&#xff0c;还有更简洁的“红黑游戏”“收获季节”等模拟…

ElasticSearch索引架构与存储

关于ES官网的介绍: Elasticsearch provides near real-time search and analytics for all types of data. Whether you have structured or unstructured text, numerical data, or geospatial data, Elasticsearch can efficiently store and index it in a way that support…

在低版本Excel中创建次级下拉列表

在低版本中indirect函数不支持选区&#xff0c;创建次级下拉列表得依靠“名称管理”给选区命名。 (笔记模板由python脚本于2024年06月26日 06:24:22创建&#xff0c;本篇笔记适合常用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www…

mid360配置lio-sam、point-lio和faster-lio(faster-lio未敢配置)

一、使用mid360配置lio-sam 1.首先从GitHub - nkymzsy/LIO-SAM-MID360 at Livox-ros-driver2 下载能支持mid360的lio-sam版本到 ws_livox/src中&#xff0c;直接编译&#xff0c;就可以成功。 2.使用 roslaunch lio_sam run6axis.launch以及播之前我才记得Mid360的包&#x…

Redis 缓存一致性

Redis 业务结构 流程图 缓存一致性 Redis 和 MySQL 中数据保持一致 双检加锁策略 主要用于解决多线程环境下的并发问题&#xff0c;确保在高并发场景下对共享资源的访问是互斥的&#xff0c;避免因竞争条件导致的不一致状态 public User findUserById(Integer id) {User user …

idea中maven新增的配置文件xx.xml没生效问题

项目场景&#xff1a; 因为公司使用自己的私服下载jar,则没有使用默认的settings.xml文件。而是新增了一个settingsold.xml文件 问题描述 公司项目有用自己的私服,Maven正常去私服下载jar包是没问题的。但是一直是去找的阿里云镜像,到导致阿里云镜像找不到相关的jar包报错!!!…

前端:Nuxt2 + Vuetify2

想要开发一个网站&#xff0c;并且支持SEO搜索&#xff0c;当然离不开我们的 Nuxt &#xff0c;那通过本篇文章让我们一起了解一下。如果构建一个Nuxt项目 安装 Nuxt&#xff0c;创建项目 安装nuxt2&#xff0c; 需要node v16&#xff0c;大家记得查看自己的node版本。构建脚…

Linux-笔记 OverlayFS文件系统小应用 恢复功能

前言 通过另一章节 OverlayFS文件系统入门 中已经大致了解了原理&#xff0c;这里来实现一个小应用。通过前面介绍我们已经知道lowerdir是只读层&#xff0c;upperdir是可读写层&#xff0c;merged是合并层&#xff08;挂载点&#xff09;&#xff0c;那么我们可以利用这个机…

.NET C# 使用GDAL将mdb转换gdb数据

.NET C# 使用GDAL将mdb转换gdb数据 目录 .NET C# 使用GDAL将mdb转换gdb数据1 环境2 Nuget3 Code 1 环境 VisualStudio2022 .NET6 GDAL 3.8.5 2 Nuget 3 Code FeatureExtension.cs public static class FeatureExtension {[DllImport("gdal.dll", EntryPoint &…

【权威主办|检索稳定】2024年法律、教育与社会发展国际会议 (LESD 2024)

2024年法律、教育与社会发展国际会议 (LESD 2024) International Conference on Law, Education and Social Development in 2024 【重要信息】 大会地点&#xff1a;成都 官网地址&#xff1a;http://www.iclesd.com 投稿邮箱&#xff1a;iclesdsub-conf.com 【注意&#xff1…

Objects and Classes (对象和类)

Objects and Classes [对象和类] 1. Procedural and Object-Oriented Programming (过程性编程和面向对象编程)2. Abstraction and Classes (抽象和类)2.1. Classes in C (C 中的类)2.2. Implementing Class Member Functions (实现类成员函数)2.3. Using Classes References O…

Renesas MCU使用SCI_I2C驱动HS3003

目录 概述 1 软硬件介绍 1.1 软件版本信息 1.2 认识HS3003 1.2.1 HS3003特性 1.2.2 HS3003寄存器 1.2.2.1 温湿度数据寄存器 1.2.2.2 参数寄存器 1.2.2.3 一个参数配置Demo 1.2.3 温湿度值转换 1.2.4 HS3003应用电路 1.2.4.1 PIN引脚定义 1.2.4.2 sensor 应用电路 …