Nacos 服务注册与发现

目录

Nacos 简介

Nacos(Dynamic Naming and Configuration Service)

Nacos 安装

下载安装包

Windows

解压

目录介绍:

修改单机模式

启动 Nacos

Linux

解压

单机模式启动

Nacos 快速上手

服务注册和发现

Nacos 负载均衡

服务下线

权重配置

开启 Nacos 负载均衡策略

同集群优先访问

给实例配置集群名称(分配实例到集群)

Nacos 健康检查

两种健康检查机制

客户端主动上报机制

反向探测机制

Nacos 服务实例类型

配置⼀个服务实例为永久实例

常⻅问题

Nacos 环境隔离

创建 Namespace

配置 namespace

Nacos配置中心

为什么需要配置中心

快速上⼿

添加配置

新建配置项

获取配置

设置命名空间

Data Id

让服务加载以 dev 为后缀的配置文件

服务部署

Nacos 与 Eureka 的区别


Nacos 简介

        2018年6⽉, Eureka 2.0宣布闭源 (但是1.X版本仍然为活跃项⽬) ,同年 7 ⽉份,阿⾥ Nacos 宣布开源.并快速成为国内最受关注开源产品.作为 Eureka 的替代, Nacos 已经成为了国内开发者的⾸选,⽬前 Nacos Star 已经突破 28 K(Eureka 12 K)

Nacos(Dynamic Naming and Configuration Service)

        在最初开源时,Nacos 选择进⾏内部三个产品合并统⼀开源( Configserver ⾮持久注册中⼼,VIPServer 持久化注册中⼼,Diamond 配置中⼼). 定位为:⼀个更易于构建云原⽣应⽤的动态服务发现,配置管理和服务管理平台.所以 Nacos 是⼀个注册中⼼组件,但它⼜不仅仅是注册中⼼组件. 截⾄⽬前, Nacos ⼏乎⽀持了所有的主流语⾔,⽐如 Java, Go, C++, Nodejs, Python, Scala等

官⽹:https://nacos.io/

仓库:https://github.com/alibaba/nacos

Nacos 安装

学习阶段采⽤单机安装即可.以下内容都是单机版

下载安装包

⽬前官⽅推荐的稳定版本为 2.2.3,咱们课程中也是⽤ 2.2.3

下载地址 https://github.com/alibaba/nacos/releases/tag/2.2.3

其他版本下载链接:下载链接:https://github.com/alibaba/nacos/releases

Windows

解压

把压缩包解压到任意⾮中⽂的⽬录下,解压后的目录如下

目录介绍:

bin:Nacos 启停脚本

        • startup.cmd :windows 平台的启动脚本

        • startup.sh :Linux 平台的启动脚本

        • shutdown.cmd :windows 平台的停⽌脚本

        • shutdown.sh : Linux 平台的停⽌脚本 

conf: Nacos 配置⽂件 

target: 存放 Nacos 应⽤的 jar 包

修改单机模式

        注意如果不修改,那么我们学习的时候没有处于集群环境下就会报错

Nacos 默认启动⽅式为集群,启动前需要修改配置为单机模式.

1. 使⽤记事本打开 startup.cmd

2. Line 26 左右,修改启动模式

set MODE="cluster"

改为

set MODE="standalone"

如下图所⽰:

启动 Nacos

启动⾮常简单,进⼊bin⽬录下,双击 startup.cmd 即可

访问Nacos主⻚,出现以下界⾯,表⽰Nacos启动成功

        http://127.0.0.1:8848/nacos

Linux

解压

        上传提前下载好的安装包到服务器上某个⽬录

解压安装包

unzip nacos-server-2.2.3.zip

如果第⼀次使⽤,未安装 unzip 命令,需要安装⼀下

apt-get install unzip

单机模式启动

        在 Linux 上可以不要修改配置文件为单机模式,可以直接通过命令设置单机模式启动

进⼊ nacos/bin ⽬录,输⼊命令:

bash startup.sh -m standalone

上述命令为 Ubuntu 系统的命令 ,nacos安装前需要先安装JDK,CenterOS使⽤:

sh startup.sh -m standalone

        注意:启动成功后就可以去访问 IP:8848/nacos Nacos 主页了,但要记得把服务器的 8848 端口开放。

Nacos 快速上手

        Nacos 是Spring Cloud Alibaba 的组件,Spring Cloud Alibaba 遵循 Spring Cloud 中定义的服务注册,服务发现规范.因此使⽤ Nacos 和使⽤ Eureka 对于微服务来说,并没有太⼤区别.

主要差异在于:

        • Eureka需要⾃⼰搭建⼀个服务,Nacos 不⽤⾃⼰搭建服务,组件已经准备好了,只需启动即可.

        • 对应依赖和配置不同

首先要想使用 Nacos,得先做到以下几步:

1.引入 spring-cloud-alibaba 的依赖

        在⽗⼯程的 pom ⽂件中的 <dependencyManagement> 中引⼊ Spring Cloud Alibaba 的依赖:

<properties><spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
</properties>
<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>

        注意:Spring Boot 和 Spring Cloud 的版本是有⼀定对应关系的. Spring Cloud Alibaba也遵循 Spring Cloud 的标准,在引⼊依赖时,⼀定要确认各个版本的对应关系. Spring Cloud Alibaba 和Spring Cloud 版本对应关系,参考官⽅⽂档:https://sca.aliyun.com/zhcn/docs/2022.0.0.0/overview/version-explain/ 版本在⼀定范围内可以⾃由选择.

2.引入 Nacos 相关的依赖

        在 order-service 和 product-service 中引⼊ nacos 依赖

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

如果要想使用 @LoadBalanced 负载均衡就需要引入 LoadBalanced 负载均衡的依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

服务注册和发现

修改配置

        因为 order-service 和 product-service 需要将服务注册到 Nacos 上,并且要在 Nacos 上查找服务,所以需要在 order-service 和 product-service 的配置文件中要配置 Nacos 注册中心的地址

# 设置服务名称
spring:application:name: product-service
# 设置 nacos 服务器地址cloud:nacos:discovery: server-addr: 127.0.0.1:8848

        给 order-service 和 product-service 服务配置了 nacos 的服务器地址以及服务名称后,启动项目,便自动的将服务注册到了 nacos 服务器上。(前提是要启动了 nacos 服务器)

Nacos 负载均衡

        ⽣产环境相对是⽐较恶劣的,我们需要对服务的流量进⾏更加精细的控制.Nacos ⽀持多种负载均衡策略,包括权重,同机房,同地域,同环境等.

服务下线

        当某⼀个节点上接⼝的性能较差时,我们可以第⼀时间对该节点进⾏下线.

操作步骤:

        找到对应的服务名称,点击详情

        找到出现问题的机器,点击下线(下线以后通过 RestTemplate 发来的请求就不会被发送到该机器)

        也可以在同样的位置点击上线,机器就会恢复能接收到请求

权重配置

除了下线之外,我们也可以配置这个节点的流量权重

操作步骤:找到对应节点 -> 编辑 -> 在弹出的窗⼝修改权重值

开启 Nacos 负载均衡策略

        有可能我们设置权重以后发现没有效果。这是由于 Spring Cloud LoadBalance 组件⾃⾝有负载均衡配置⽅式,所以不⽀持 Nacos 的权重属性配置.我们需要开启 Nacos 的负载均衡策略,让权重配置⽣效

        可以通过该文档查看官方提出的解决方案:如何解决MSE Nacos上修改服务实例的权重不生效问题_微服务引擎(MSE)-阿里云帮助中心 (aliyun.com)

#开启nacos的负载均衡策略 
spring.cloud.loadbalancer.nacos.enabled=truespring:cloud:loadbalancer:nacos:enabled: true

        配置后便发现权重成功生效。

常见问题修改权重时,可能会报错:

报错信息:caused:errCode:500,errMsg:do metadata operation failed;caused: com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group [naming_instance_metadata] did not find the Leader node;caused: The Raft Group [naming_instance_metadata] did not find the Leader node;

原因: Nacos 采⽤ raft 算法来计算 Leader, 并且会记录前⼀次启动的集群地址,当服务器 IP 改变时会导 致 raft 记录的集群地址失效, 导致选 Leader 出现问题.(⽹络环境发⽣变化时,IP 地址也会发⽣变化) 解决办法:删除 Nacos 根⽬录下 data ⽂件夹下的 protocol ⽂件夹即可.

同集群优先访问

        注意:要想同集群优先访问生效还得开启 Nacos 负载均衡策略

        Nacos 把同⼀个机房内的实例,划分为⼀个集群.所以同集群优先访问,在⼀定程度上也可以理解为同机房优先访问.微服务架构中,⼀个服务通常有多个实例共同提供服务,这些实例可以部署在不同的机器上,这些机器可 以分布在不同的机房,⽐如 product-service:

实例1:分布在上海机房

实例2:分布在上海机房

实例3:分布在北京机房

实例4:分布在北京机房

微服务访问时,应尽量访问同机房的实例.当本机房内实例不可⽤时,才访问其他机房的实例.

        ⽐如 order-service 在上海机房, product-service 在北京和上海机房都有实例,那我们希望可以优先访问上海机房,如果上海机房没有实例,或者实例不可⽤,再访问北京机房的实例.通常情况下,因为同⼀个机房的机器属于⼀个局域⽹,局域⽹访问速度更快⼀点.

给实例配置集群名称(分配实例到集群)

为服务配置集群名称

spring:cloud:nacos:discovery:cluster-name: SH #集群名称: 上海集群 

重启服务:观察 Nacos 控制台, SH 集群下多了⼀个实例

复制 product-service 启动配置,添加 VM Option 设置 9091 端⼝号的实例,机房为 BJ

-Dserver.port=9091 -Dspring.cloud.nacos.discovery.cluster-name=BJ

设置 9092 端⼝号的实例,机房为 BJ

-Dserver.port=9091 -Dspring.cloud.nacos.discovery.cluster-name=BJ

为 order-service 配置集群名称:SH

spring:cloud:nacos:discovery:cluster-name: SH #集群名称: 上海集群

        此时 order-service 服务和 9090 端口的 product-service 服务都在 SH 集群,而 9091 和 9092 端口的  product-service 服务 在 BJ 集群,所以 order-service 服务会优先访问 9090 端口的 product-service 服务

        如果把 9090 端⼝的实例进⾏下线(SH集群), 再次访问接⼝,观察⽇志,发现 9091 端⼝和 9092 端⼝的实例收到了请求

Nacos 健康检查

两种健康检查机制

        Nacos 作为注册中⼼,需要感知服务的健康状态,才能为服务调⽤⽅提供良好的服务.Nacos 中提供了两种健康检查机制:

客户端主动上报机制

        • 客户端通过⼼跳上报⽅式告知服务端(nacos注册中⼼)健康状态,默认⼼跳间隔5秒;

        • nacos 会在超过15秒未收到⼼跳后将实例设置为不健康状态,超过30秒将实例删除服务器端

反向探测机制

        • nacos 主动探知客户端健康状态,默认间隔为20秒.

        • 健康检查失败后实例会被标记为不健康,不会被⽴即删除.

        Nacos 中的健康检查机制不能主动设置,健康检查机制是和 Nacos 的服务实例类型强相关的.

Nacos 服务实例类型

Nacos 的服务实例(注册的节点)分为临时实例和⾮临时实例.

临时实例:如果实例宕机超过⼀定时间,会从服务列表剔除,默认类型.

⾮临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例

        Nacos 对临时实例,采取的是客户端主动上报机制,对⾮临时实例,采取服务器端反向探测机制.

配置⼀个服务实例为永久实例

spring:cloud:nacos:discovery:ephemeral: false # 设置为⾮临时实例 

        重启实例后,临时实例变为 false ,说明成为了非临时实例

常⻅问题

Nacos 服务实例类型不允许改变

        设置服务实例类型,重新启动实例 Nacos 可能会报错

        原因:Nacos 会记录每个服务实例的 IP 和端⼝号,当发现 IP 和端⼝都没有发⽣变化时,Nacos 不允许⼀个服务实例类型发⽣变化,⽐如从临时实例,变为⾮临时实例,或者从⾮临时实例,变成临时实例.

        解决办法:1. 停掉nacos 2. 删除 nacos⽬录下 /data/protocol/raft 信息,⾥⾯会保存应⽤实例的元数据信息.

服务正常,Nacos 健康检查失败

现象: 服务正常,但是 Nacos 显⽰健康状态为 false

解决办法参考:如何解决Nacos持久化实例HTTP/TCP的健康检查不通过问题_微服务引擎(MSE)-阿里云帮助中心 (aliyun.com)

Nacos 环境隔离

企业开发中,⼀个服务会分为开发环境,测试环境和⽣产环境.

        1. 开发环境:开发⼈员⽤于开发的服务器,是最基础的环境.⼀般⽇志级别设置较低,可能会开启⼀些 调试信息.

        2. 测试环境:测试⼈员⽤来进⾏测试的服务器,是开发环境到⽣产环境的过渡环境.

         3. ⽣产环境:正式提供对外服务的环境,通常关掉调试信息.通常情况下,这⼏个环境是不能互相通信的.Nacos 提供了namespace(命名空间)来实现环境的隔离.不同的 namaspace 的服务不可⻅.

创建 Namespace

默认情况下,所有服务都在同⼀个 namespace ,名为 public 

        点击命名空间 - > 新建命名空间 -> 设置命名空间的属性

配置 namespace

        namespace 创建完成后,对服务进⾏配置,将服务添加到相应的环境。

spring:cloud:nacos:discovery:namespace: 命名空间ID

        此时服务会被添加到另一个环境中,无法使用其他环境的服务。

Nacos配置中心

       除了注册中⼼和负载均衡之外,Nacos 还是⼀个配置中⼼,具备配置管理的功能. Namespace 的常⽤场景之⼀是不同环境的配置区分隔离.例如开发测试环境和⽣产环境的配置隔离.

为什么需要配置中心

        当前项⽬的配置都在代码中,会存在以下问题:

        1. 配置⽂件修改时,服务需要重新部署.微服务架构中,⼀个服务可能有成百个实例,挨个部署⽐较⿇烦,且容易出错.

        2. 多⼈开发时,配置⽂件可能需要经常修改,使⽤同⼀个配置⽂件容易冲突.

        配置中⼼就是对这些配置项进⾏统⼀管理.通过配置中⼼,可以集中查看,修改和删除配置,⽆需再逐个修改配置⽂件.提⾼效率的同时,也降低了出错的⻛险.

        

1. 服务启动时,从配置中⼼读取配置项的内容,进⾏初始化.

2. 配置项修改时,通知微服务,实现配置的更新加载.

快速上⼿

通过以下操作,我们来感受下 Nacos 配置中⼼的使⽤

参考⽂档:Nacos Spring Cloud 快速开始

添加配置

在 Nacos 控制台添加配置项

        注意:配置管理的命名空间和服务列表的命名空间是隔离的,两个是分别设置的.默认是 public 也就是服务管理命名空间配置 ≠ 配置管理的命名空间

新建配置项

说明:

1. Data ID设置为项⽬名称

2. 配置内容的数据格式,⽬前只⽀持 properties 和 yaml 类型

3. 设置配置内容

获取配置

引⼊ Nacos Config 依赖(bootstrap

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud 2020.*之后版本需要引⼊bootstrap--> 
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

配置 bootstrap.properties

        (告诉服务,配置中心所在的位置)(因为配置中心和服务的注册和发现的位置可能不同,所以是分别配置的,并且配置中心所在的位置必须在 bootstrap.properties 配置文件中设置

# 配置的 ID
spring.application.name=product-service
# 配置的 IP 地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

或者使⽤ bootstrap.yml 

spring:application:name: product-servicecloud:nacos:config:server-addr: 127.0.0.1:8848

        spring.application.name 需要和 nacos 配置管理的 Data ID⼀致 spring.cloud.nacos.config.server-addr 为 Nacos Server 的地址

        配置中⼼和注册中⼼的配置是隔离的

        Nacos 配置中⼼: spring.cloud.nacos.config.server-addr

        Nacos 注册中⼼: spring.cloud.nacos.discovery.server-addr

        配置完以后通过代码从配置中心获取配置:

package com.bite.product.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** Created with IntelliJ IDEA.* Description:* User: wuyulin* Date: 2024-09-21* Time: 13:17*/
@RestController
// 配置进⾏热更新(配置中心的配置改了以后,能够自动更新为新配置)
@RefreshScope
public class NacosController {//通过 Value 从配置中心获取配置@Value("${nacos.config}")private String nacosConfig;@RequestMapping("/getConfig")public String getConfig(){return "从 nacos 配置中心获取到配置项 nacos.config:"+nacosConfig;}
}

@Value 读取配置

@RefreshScope 配置进⾏热更新

nacos.config 是配置的 key 值,通过 key 获得 value 值

        访问接口即可获取配置

设置命名空间

        Nacos 配置管理的命名空间和服务列表的命名空间是分别设置的.默认是 public ,Nacos 命名空间配置依然在 bootstrap.properties 中进⾏配置

spring.cloud.nacos.config.namespace=命名空间 ID

对应 bootstrap.yml 配置

spring:cloud:nacos:config:namespace: 命名空间 ID

命名空间的ID,如下图所⽰:

如果设置命名空间后,项⽬启动时,会从该命名空间下找对应的配置项.

Data Id

Data Id 格式介绍

在 Nacos Spring Cloud 中, dataId 的完整格式如下:

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

        • prefix 默认为 spring.application.name 的值, 也可以通过配置项 spring.cloud.nacos.config.prefix 来配置.

        • spring.profiles.active 即为当前环境对应的 profile.当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${fileextension}

        • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。⽬前只⽀持 properties 和 yaml 类型.默认为 properties

微服务启动时,会从 Nacos 读取多个配置⽂件:

1. ${prefix}-${spring.profiles.active}.${file-extension} 如:product-service-dev.properties

2. ${prefix}.${file-extension} ,如:product-service.properties

3. ${prefix} 如 product-service

        三个⽂件的优先级为: product-service-dev.properties > product-service.properties >product-service

让服务加载以 dev 为后缀的配置文件

spring.profiles.active=dev

        新增 product-service-dev.properties 和 product-service.properties 配置文件,此时有

        此时访问会发现优先访问 product-service-dev.properties 的配置

        将该配置删除再访问,访问的是 product-service.properties 中的配置

        符合上述所说的优先级

服务部署

        我们一般会根据开发环境设置多个配置文件,参考:Spring 多平台配置文件

        在配置多个配置文件后,可能再次运行项目会报错,大概率是因为程序没有读取 bootstrap.properties 配置文件。可以在 pom.xml 在添加如下设置:

        提现程序要加载 src/main/resources 路径下所有的配置文件

    <build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><includes><include>**/**</include></includes></resource></resources></build>

Nacos 与 Eureka 的区别

共同点:

        • 都⽀持服务注册和服务拉取

区别:

        1. 功能 Nacos 除了服务发现和注册之外,还提供了配置中⼼,流量管理和DNS服务等功能.

        2. CAP理论 Eureka 遵循 AP 原则,Nacos 可以切换 AP 和 CP 模式,默认 AP. Nacos 根据配置识别 CP 或者 AP 模式.如果注册 Nacos 的 Client 的节点是临时节点,那么 Nacos 对这个 Client 节点的效果就是AP, 反之是 CP. AP 和 CP 可以同时混合存在.

        3. 服务发现 Eureka:基于拉模式. Eureka Client 会定期从 Server 拉取服务信息,有缓存,默认每30秒拉取⼀次.

        Nacos:基于推送模式.服务列表有变化时实时推送给订阅者,服务端和客户端保持⼼跳连接.

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

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

相关文章

LeetCode --- 139双周赛

题目列表 3285. 找到稳定山的下标 3286. 穿越网格图的安全路径 3287. 求出数组中最大序列值 3288. 最长上升路径的长度 一、找到稳定山的下标 遍历数组&#xff0c;统计符合要求的答案即可&#xff0c;代码如下 class Solution { public:vector<int> stableMountai…

【开源免费】基于SpringBoot+Vue.JS服装商城系统(JAVA毕业设计)

本文项目编号 T 046 &#xff0c;文末自助获取源码 \color{red}{T046&#xff0c;文末自助获取源码} T046&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 新…

【C++】仿函数

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;C从小白到高手 &#x1f339;往期回顾&#x1f339;&#xff1a;【C】list常见用法 &#x1f516; 流水不争&#xff0c;争的是滔滔不息。 文章目录 一、仿函数的介绍…

网安面试会问到的:http的长连接和短连接

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

毕业设计选题:基于ssm+vue+uniapp的智能停车场管理系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

力扣中等 33.搜索旋转排序数组

文章目录 题目介绍题解 题目介绍 题解 首先用 153. 寻找旋转排序数组中的最小值 的方法&#xff0c;找到 nums 的最小值的下标 i。 然后分类讨论&#xff1a; 如果 target>nums[n−1]&#xff0c;在 [0,i−1] 中二分查找 target。 如果 target≤nums[n−1]&#xff0c;那…

fasterRCNN模型实现飞机类目标检测

加入会员社群&#xff0c;免费获取本项目数据集和代码&#xff1a;点击进入>> 关于python哥团队 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师…

Nginx静态资源优化、压缩、缓存处理

一、静态资源优化配置语法 Nginx对静态资源如何进行优化配置。这里从三个属性配置进行优化&#xff1a; sendfile on; tcp_nopush on; tcp_nodeplay on; &#xff08;1&#xff09;sendfile&#xff0c;用来开启高效的文件传输模式。 语法sendfile on |off;默认值sendfile …

【图像检索】基于Gabor特征的图像检索,matlab实现

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于Gabor特征的图像检索&#xff0c;用matlab实现。 一、案例背景和算法介绍 这次博…

Java笔试面试题AI答之单元测试JUnit(7)

文章目录 37. 请列举一些JUnit扩展 &#xff1f;1. 参数化测试2. 条件测试执行3. 临时目录4. 时间测试5. 重复测试6. 前置/后置条件7. Mockito8. Spring Test9. JUnit Vintage10. Testcontainers11. 自定义注解和扩展12. 测试监听器&#xff08;TestListener 和 RunListener&am…

2024年数学建模比赛题目及解题代码

目录 一、引言 1. 1竞赛背景介绍 1.1.1数学建模竞赛概述 1.1.2生产过程决策问题在竞赛中的重要性 1.2 解题前准备 1.2.2 工具与资源准备 1.2.3 心态调整与策略规划 二、问题理解与分析 三、模型构建与求解 3.1 模型选择与设计 3.1.1 根据问题特性选择合适的数学模型类…

【永磁同步电机(PMSM)】 4. 坐标变换的 Matlab 仿真

【永磁同步电机&#xff08;PMSM&#xff09;】 4. 坐标变换的 Matlab 仿真 1. Clarke 变换的模型与仿真1.1 Clarke 变换1.2 Clarke 变换的仿真模型 2. Park 变换的模型与仿真2.1 Park 变换2.2 Park 变换的仿真模型 3. Simscape标准库变换模块3.1 abc to Alpha-Beta-Zero 模块3…

更换硬盘后,电脑装完系统进不去?或PE能识别硬盘但开机/启动/BIOS识别不了硬盘解决办法

由于现在的电脑主板&#xff0c;默认都是UEFI启动&#xff0c;硬盘只有使用GUID分区表&#xff0c;主板BIOS才找得到系统引导&#xff01; 而当我们拿到一块新硬盘&#xff0c;使用分区工具默认类型分区&#xff0c;默认是MBR类型&#xff0c;所以这种分区的硬盘&#xff0c;B…

14.面试算法-字符串常见算法题(三)

1. 字符串回文问题 1.1 LeetCode.125. 验证回文串 回文问题在链表中是重点&#xff0c;在字符串中同样是个重点。当初我去美团面试第一轮技术面的第一个算法题就是让写判断字符串回文的问题。 这个本身还是比较简单的&#xff0c;只要先转换成字符数组&#xff0c;然后使用双…

肺结节检测系统源码分享

肺结节检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件

uniapp uview扩展u-picker支持日历期间 年期间 月期间 时分期间组件 日历期间、年期间、月期间及时分期间组件在不同的应用场景中发挥着重要的作用。这些组件通常用于表单、应用程序或网站中&#xff0c;以方便用户输入和选择特定的日期和时间范围。以下是这些组件的主要作用&a…

C++:日期类的实现

目录 一、前言 二、头文件 三、各个函数的实现 打印、检查日期及获取日期 、、-、-、 、<、<、>、>、 &#xff01; 日期-日期 >>、<< 一、前言 前面几篇讲了关于类和对象的一些知识&#xff0c;本篇就来实现一下前面用到的日期类。 二、头文…

TryHackMe 第3天 | Pre Security (中)

该学习路径讲解了网络安全入门的必备技术知识&#xff0c;比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识&#xff0c;本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…

Java面试篇-AOP专题(什么是AOP、AOP的几个核心概念、AOP的常用场景、使用AOP记录操作日志、Spring中的事务是如何实现的)

文章目录 1. 什么是AOP2. AOP的几个核心概念3. AOP的常用场景4. 使用AOP记录操作日志4.1 准备工作4.1.1 引入Maven依赖4.1.2 UserController.java4.1.3 User.java4.1.4 UserService.java 4.2 具体实现&#xff08;以根据id查询用户信息为例&#xff09;4.2.1 定义切面类&#x…

SkyWalking 环境搭建部署

架构简介 skywalking agent : 和业务系统绑定在一起,负责收集各种监控数据skywalking oapservice : 是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中;接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。Skywalking oapserv…