【Spring Cloud Alibaba】:Nacos 使用全详解

article/2025/8/5 23:28:17

在这里插入图片描述

目录

    • 一、服务注册发现
      • 1、nacos-provider服务提供者创建
      • 2、nacos-consumer服务消费者创建
    • 二、配置管理
      • 1、添加配置文件
      • 2、拉取配置
      • 3、读取配置
      • 4、配置热更新
        • 方式一:添加 @RefreshScope 注解
        • 方式二:使用@ConfigurationProperties注解代替@Value注解。
      • 5、多环境共享
        • 1)添加环境共享配置
        • 2)读取环境共享配置
        • 3)运行两个ConfigApplication
        • 4)配置共享的优先级
    • 三、多环境配置隔离
      • 1、命名空间的创建
      • 2、添加配置信息
      • 3、读取不同环境下的配置信息
    • 四、业务配置隔离
      • 1、创建配置信息指定Group分组
      • 2、读取Group的配置信息
    • 五、Nacos实现共享配置
      • 1、添加一个环境共享配置
      • 2、读取共享配置
    • 六、Nacos的持久化
    • 七、Nacos集群的搭建
    • 拓展

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!

🌟了解分布式系统的 Gossip协议 请看 : Gossip协议:分布式系统中的“八卦”传播艺术

其他优质专栏: 【🎇SpringBoot】【🎉多线程】【🎨Redis】【✨设计模式专栏(已完结)】…等

如果喜欢作者的讲解方式,可以点赞收藏加关注,你的支持就是我的动力
✨更多文章请看个人主页: 码熔burning

前言:
上文我们了解到 Nacos 的作用,以及在本地启动 Nacos 的服务器,接下来,在本篇文件会详细的讲解 Nacos 的使用和配置。🎈

一、服务注册发现

整合 Spring Cloud AlibabaNacos 简单的很,直接启动 Alibaba提供的 Nacos 服务即可,这样就能让程序员把更多的经历放在核心业务上。

看本文之前先看:【Spring Cloud Alibaba】:Nacos 入门讲解

以下是一个简单的架构图:
在这里插入图片描述

接下来我要按照这个简单的架构图来讲解!

参考上面的架构图,需要创建两个模块,分别是nacos-provider(服务提供者)、nacos-consumer(服务消费者)

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

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

1. 添加 Maven 依赖
在pom文件中需要添加 spring-cloud-starter-alibaba-nacos-discovery 这个依赖,代码如下:

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

这里没有指定版本是因为父模版指定了 spring-cloud-alibaba-dependencies 的版本,所以子模块直接引入依赖即可,因为这样能够更好地达到版本管理的效果。
具体还请看:【Spring Cloud Alibaba】:Nacos 入门讲解

2.配置YML文件

server:port: 9901
spring:application:# 指定服务名称,在nacos中的名字name: nacos-providercloud:nacos:discovery:# nacos的服务地址,nacos-server中IP地址:端口号server-addr: 127.0.0.1:8848

3.开启服务注册和发现功能
大部分 SpringBoot 引入了某些功能模块之后都要手动的在启动类添加@EnableXxxx 来开启某个功能,否则无法引入自动配置。这里开启服务注册发现功能的注解是:@EnableDiscoveryClient

@EnableDiscoveryClient     //开启服务注册发现功能
@SpringBootApplication
public class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProvideApplication.class, args);}
}

4.编写接口
由于 nacos-provider 作为服务的提供者,肯定是需要提供服务的,这里编写一个接口来供消费者服务。

@RestController
@RequestMapping("/nacos")
public class testController {@GetMapping("/test")public String test(){return "调用了服务者提供服务接口";}
}

5.启动项目
启动项目就是在项目的启动类中启动,点这绿色的小三角符号。
在这里插入图片描述

启动完成之后,可以在 Nacos 中查看是否以及进行了服务的注册,可以看到 nacos-provider 已经成功注册到了 Nacos 中。
在这里插入图片描述


2、nacos-consumer服务消费者创建

nacos-consumernacos-provider 步骤差不多
1.添加 Maven 依赖
nacos-consumer 服务的pom文件添加 spring-cloud-starter-alibaba-nacos-discovery

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

2.配置YML文件

server:port: 9902spring:application:name: nacos-consumercloud:nacos:discovery:server-addr: 127.0.0.1:8848service-url:nacos-provider: http://nacos-provider    #微服务的访问名称

3.开启服务注册和发现功能
使用 @EnableDiscoveryClient 注解来开启服务注册和发现功能

@SpringBootApplication
@EnableDiscoveryClient    //开启功能的注解
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}
}

4.调用 nacos-provider 的接口
首先创建一个 RestTemplate ,将其注册到 IOC 容器中,然后添加@LoadBalanced注解来开启负载均衡。
开启负载均衡前需要添加依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
public class AutoBeanConfig {@Bean@LoadBalanced    //开启负载均衡public RestTemplate restTemplate(){return new RestTemplate();}
}

编写调用接口:

@RestController
public class ConsumerController {@Resourceprivate RestTemplate restTemplate;//获取配置文件中的微服务访问地址@Value("${service-url.nacos-provider}")private String servicePrivadeUrl;@GetMapping("/test")public ResponseEntity<String> test() {return restTemplate.getForEntity(servicePrivadeUrl + "/nacos/test", String.class);}
}

注意: 因为已经将 nacos-provider 注入到了 Nacos 中了,所以是可以直接通过服务名直接找到对应的服务的,而 servicePrivadeUrl 注入的就是服务名。

5.启动项目
启动之后就能看到 Nacos 中已经有两个服务了
在这里插入图片描述

然后进行接口的调用看看能不能调用成功,在浏览器中访问:http://localhost:9902/test,可以看到调用成功了。
在这里插入图片描述
总结:可以看到,Nacos 的服务注册和发现是如此的简单。还不需要自己搭建注册中心,直接提供好了。

二、配置管理

为什么需要配置管理呢?🤔试想一下、如果你的一个线上项目想要修改某个配置,比如数据源变了,要添加新的数据源,这个时候修改完了应该怎么办?把项目停掉重启?你觉得这样做合理吗,显然是不合理的吧。

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。

Nacos 一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。

在这里插入图片描述

1、添加配置文件

首先,在 Nacos 添加配置文件,如下图步骤:
在这里插入图片描述
填写完配置信息之后,进行发布

在这里插入图片描述

Data ID是什么?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}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。

2、拉取配置

创建一个模块,名叫 config-demo 父类为 ,来获取 Nacos 的配置内容

首先添加依赖:


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

创建一个 bootstrap.yml 文件,该文件是用来设置 Nacos 的配置,该文件会在 application.yml 之前被读取
在这里插入图片描述
配置如下

spring:application:name: nacos-config # 服务名称profiles:active: dev #开发环境,这里是dev cloud:nacos:server-addr: localhost:8848 # Nacos地址config:file-extension: yaml # 文件后缀名

根据配置文件的内容,他会去 Nacos 中读取作为 nacos-config-dev.yaml 的Data ID里面的内容,也就是我们上面在 Nacos 中添加的。

在这里插入图片描述

application.yml 文件设置改模块的端口为9903

server:port: 9903

3、读取配置

创建一个 controller 来测试一下

@RestController
public class NacosController {@Value("${datas.version}")    //读取Nacos的配置信息private String version;@GetMapping("/test")public String test(){return "这是在Nacos中添加的配置信息: version = " + version;}
}

启动项目,访问 http://localhost:9903/test ,结果如下:
在这里插入图片描述

恭喜你,读取 Nacos 的配置信息成功!🎉

但是目前还不能动态刷新(热更新), 也就是修改了 Nacos 中的配置信息,无需启动项目就能实时的读取新的配置信息。不相信?🤔那你请看!
在这里插入图片描述

不启动,重新访问 http://localhost:9903/test

在这里插入图片描述

那怎么才能实现热更新呢?别急,往下看!

4、配置热更新

方式一:添加 @RefreshScope 注解

@Value 注入的变量所在类上添加注解 @RefreshScope
在这里插入图片描述

重新启动项目,访问http://localhost:9903/test
在这里插入图片描述
修改 Nacos 中的配置信息:

在这里插入图片描述
再次访问http://localhost:9903/test

在这里插入图片描述

方式二:使用@ConfigurationProperties注解代替@Value注解。

添加一个类,来读取 Nacos 的配置信息

@Component
@Data
@ConfigurationProperties(prefix = "datas")
public class DatasProperties {private String version;
}

然后再 controller 中使用这个类来代替@Value

在这里插入图片描述
重启应用,访问http://localhost:9903/test

在这里插入图片描述

修改 Nacos 的配置内容:

在这里插入图片描述

访问http://localhost:9903/test

在这里插入图片描述

5、多环境共享

其实微服务启动时,会去 nacos 读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  • [spring.application.name].yaml,例如:userservice.yaml
    [spring.application.name].yaml不包含环境,因此可以被多个环境共享。
1)添加环境共享配置

我们首先在 nacos 中添加一个 nacos-config.yaml

在这里插入图片描述

在这里插入图片描述

2)读取环境共享配置

在 nacos-config 服务中修改 DatasProperties 类,读取新添加的属性内容:

在这里插入图片描述

修改 controller 类的内容

在这里插入图片描述

3)运行两个ConfigApplication

复制一个 nacos-config 服务,修改端口号为,修改Active profiles,然后运行两个程序。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

分别访问 http://localhost:9903/testhttp://localhost:9904/test

在这里插入图片描述

在这里插入图片描述

可以看出来,不管是 dev ,还是 test 环境,都读取到了 content 这个属性的值。

4)配置共享的优先级

在这里插入图片描述

三、多环境配置隔离

一般在业务开发的时候,至少会有三个环境,也就是开发(dev),测试(test),生产环境(prod)

每个环境肯定配置是大部分是不一样的,所以说,怎么才能很好的在不同的环境使用不一样的配置呢?🤔是的,Nacos 就能够很好的区分以上三种不同的配置。

Nacos 是如何区分的呢?答案就是 Namespace

Namespace(命名空间):解决多环境及多租户数据的隔离问题 在多套不同的环境下,可以根据指定的环境创建不同的Namespace,实现多环境的数据隔离

查看配置信息所处在那个命名空间:

在这里插入图片描述

1、命名空间的创建

创建一个命名空间:

在这里插入图片描述

作者这里创建了3个不同的命名空间

在这里插入图片描述

创建完成之后,那应该怎么使用呢?怎么指定那个命名空间呢?答案就是: 命名空间ID

2、添加配置信息

首先在 dev 这个命名空间下添加配置信息

在这里插入图片描述

3、读取不同环境下的配置信息

修改配置文件 bootstrap.yml

在这里插入图片描述

配置完毕,启动项目,访问 http://localhost:9903/test

在这里插入图片描述

四、业务配置隔离

在实际项目中,是有很多的微服务的,不同服务之间的配置是不一样的,那这个时候如果都创建在一起,那会显得非常的臃肿,难以区分,Nacos 针对这个问题是如何做的呢?🤔
答案就是 Group,该单词大家都认识吧,也就是分组的意思。😁

Group:Nacos 中的一组配置集,是组织配置的维度之一,简单的说则是不同的系统或微服务的配置文件可以放在一个组里。Nacos如果不指定Group,则默认的分组是DEFAULT_GROUP。

对于有多个微服务而言,比如订单系统,用户系统,针对这两个不同的微服务,可以将他们单独的分为一个组,订单系统分在ORDER_GROUP、用户系统分在USER_GROUP

1、创建配置信息指定Group分组

在命名空间 dev 环境下创建一个配置信息,指定分组

在这里插入图片描述

在这里插入图片描述

2、读取Group的配置信息

修改配置文件 bootstrap.yml 的内容

在这里插入图片描述

配置完成,启动项目,访问 http://localhost:9903/test

在这里插入图片描述

五、Nacos实现共享配置

共享配置,主要体现在随着项目中的微服务数量越来越多😣,而这些微服务多多少少都会有一些共同的配置,比如数据源信息啊。而这个时候我们就可以将这些共同的配置抽取出来,作为项目中共有的配置。

Nacos 就能很好的实现共享配置,接下来让我来带你一步一步地操作。😁

1、添加一个环境共享配置

在这里插入图片描述
在这里插入图片描述

注意: 因为我们是在public命名空间下创建的共享配置,所以在微服务的配置文件中不指定namespace的值默认就是读取在public命名空间下的配置信息

2、读取共享配置

修改 nacos-config 的配置文件 bootstrap.yaml 的内容

在这里插入图片描述

这里就通过 @Value 注解来获取 Nacos 的配置内容

在这里插入图片描述
启动项目,访问 http://localhost:9903/test1

在这里插入图片描述

注意: 如果共享配置信息放在了其他命名空间或者指定了分组,需要填写相应的namespace和Group

在这里插入图片描述

六、Nacos的持久化

Nacos默认使用的是内嵌的数据库 Derby ,如果想要更换数据库,比如 mysql ,也是非常简单的。

首先在 MySQL 中创建一个数据库,名为 nacos_config(名字随意哈),然后执行 Nacos 提供的 SQL 脚本,在 Nacos 下载目录的 conf 文件夹下


在这里插入图片描述

SQL 脚本执行完成之后,生产的表如下:


在这里插入图片描述

然后修改配置文件的数据源


在这里插入图片描述

在配置文件中取消 MySQL 数据源的注释,配置成自己的数据源即可


在这里插入图片描述

修改完毕,重启 Nacos-server

七、Nacos集群的搭建

Nacos推荐集群模式部署,这样可以避免单点故障,官方给出的 Nacos 的集群图:


在这里插入图片描述
其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。

企业中大致会是这样的架构:


在这里插入图片描述

那如何搭建集群呢?
首先进入到 conf 文件下,找到 cluster.conf.example 文件复制一份并修改名称为 cluster.conf 放到当前目录下


在这里插入图片描述

修改内容如下:

192.168.124.1:8847
192.168.124.1:8848
192.168.124.1:8849

192.168.124.1就是你的服务器IP,后面的是Nacos的端口号

修改完成之后,将nacos文件复制两份


在这里插入图片描述

然后分别修改两个个文件夹中的application.properties
nacos1:

server.port=8847

nacos2:

server.port=8849

然后分别启动三个 nacos 节点,我这里先启动两个,来查看效果,双击 startup.cmd 文件
访问 http://localhost:8848/nacos ,点击集群管理,可以看到
在这里插入图片描述

但是一般会使用 nginx 来进行反向代理,这里就不演示 nginx 的搭建了。

nginx 配置文件的内容大致为:

upstream nacos{server 192.168.124.1:8847server 192.168.124.1:8848server 192.168.124.1:8849
}server{listen 80;location / {proxy_pass http://nacos;}
}

你以为这样就完了? 不,还没有完!
你既然搭建了集群,那肯定是要修改项目的 bootstrap.yaml


在这里插入图片描述

或者:


在这里插入图片描述

到目前为止,你已经掌握了Nacos的大部分知识了,该文章也告一段落了

拓展

Nacos 默认是 AP,但可以通过配置切换到 CP 模式。 选择哪种模式取决于你的业务需求。 如果对可用性要求更高,选择 AP;如果对数据一致性要求更高,选择 CP。

深入了解CAP知识请看:CAP定理和BASE理论 趣学!


http://www.hkcw.cn/article/BBmymcNgOw.shtml

相关文章

【金仓数据库征文】学校AI数字人:从Sql Server到KingbaseES的数据库转型之路

摘要&#xff1a;本文围绕学校 AI 数字人项目从 Sql Server 数据库替换至 KingbaseES 数据库的实践展开&#xff0c;涵盖迁移背景、两种数据库对比、替换实施步骤、应用效果展示、问题与解决措施等多方面内容&#xff0c;为教育领域类似项目提供了详实参考。 目录 1.背景与需求…

前端框架大对决:uni-app、taro、flutter、RN 哪家强?

文章目录 一、引言二、框架初印象三、开发语言与环境搭建3.1 开发语言特色3.2 环境搭建流程四、跨平台能力4.1 适配平台情况4.2 平台专有功能调用与界面适配特点五、性能表现5.1 渲染机制剖析5.2 性能测试数据六、组件与插件生态6.1 内置组件丰富度6.2 插件市场活跃度七、开发体…

rpcsx-ui-android:打造 RPCSX 模拟器原生态 Android UI

rpcsx-ui-android&#xff1a;打造 RPCSX 模拟器原生态 Android UI rpcsx-ui-android 项目地址: https://gitcode.com/gh_mirrors/rp/rpcsx-ui-android 项目介绍 rpcsx-ui-android 是一款为 RPCSX 模拟器量身定制的原生 Android 用户界面。该项目的目标是为用户提供流…

Android 15强制edge-to-edge全面屏体验

一、背景 Edge-to-edge 全面屏体验并非 Android 15 才有的新功能&#xff0c;早在 Android 15 之前系统就已支持。然而&#xff0c;该功能推出多年来&#xff0c;众多应用程序依旧未针对全面屏体验进行适配。因此&#xff0c;在 Android 15 的更新中&#xff0c;Google 终于决…

MacOS上如何运行内网穿透详细教程

本文以市面常见、好用的内网穿透为例&#xff0c;一款为开源内网穿透工具Frp;另一款为国产新锐软件ZeroNews。 一、Frp&#xff08;开源工作、使用自由&#xff09; 1. 下载 FRP 访问 FRP 的 GitHub 发布页&#xff1a; https://github.com/fatedier/frp/releases 选择适合 …

250207-MacOS修改Ollama模型下载及运行的路径

在 macOS 上&#xff0c;Ollama 默认将模型存储在 ~/.ollama/models 目录。如果您希望更改模型的存储路径&#xff0c;可以通过设置环境变量 OLLAMA_MODELS 来实现。具体步骤如下&#xff1a; 选择新的模型存储目录&#xff1a;首先&#xff0c;确定您希望存储模型的目标目录路…

iOS uni-app 原生插件开发

下面以创建一个物体检测插件为例。 开发环境&#xff1a; XCode 16.3 SDK包 &#xff0c;4.45 HBuilderX 4.45 1. 解压 SDK 2. 创建一个插件&#xff0c;放到 HBuilder-uniPluginDemo 目录下 3. 配置依赖 打开 HBuilder-uniPlugin.xcodeproj 将 ObjectDetector.xcodeproj 拖…

生产力工具|vscode for mac的安装python库和使用虚拟环境(一)

一、在vscode中运行python代码&#xff08;mac或windows&#xff09; &#xff08;一&#xff09;在vscode中安装Python插件 若想在vscode中高效率的编辑Python代码&#xff0c;需要安装Python插件&#xff0c;点击下图中红框内的按钮&#xff1a; 然后在左上角的搜索框中输入…

【超适合小白】苹果电脑MAC——抓包工具-Charles使用超详细教程!!!适合小白!!!

一、Charles是什么&#xff1f; Charles是一个HTTP代理服务器&#xff0c;是类似于一个监视器&#xff0c;简单来说可以直接抓取手机或者浏览器中的接口&#xff0c;当手机/浏览器连接Charles的代理访问互联网时&#xff0c;Charles可以监控浏览器发送和接收的所有数据。它允许…

在macOS上安装MySQL

macOS的MySQL有多种不同的形式&#xff1a; 1、本机包安装程序&#xff0c;它使用本机macOS安装程序&#xff08;DMG&#xff09;引导您完成MySQL的安装。有关详细信息&#xff0c;请参阅第2.4.2节&#xff0c;“使用本机包在macOS上安装MySQL”。您可以将包安装程序与macOS一…

2024年博客之星主题创作|Android 开发:前沿技术、跨领域融合与就业技能展望

目录 引言 一、推动 Android 应用创新的核心力量 1.1 人工智能与机器学习的崛起 1.2 增强现实&#xff08;AR&#xff09;与虚拟现实&#xff08;VR&#xff09;的应用扩展 1.3 5G技术的推动 1.4 跨平台开发技术的成熟 1.4.1 React Native 1.4.2 Flutter 1.4.3 Taro …

中兴B862AV3.2M刷机包晨星MSO9385_2+8_安卓9_免拆机免打开ADB固件包

在开始刷机之前&#xff0c;请务必确认你的设备型号为中兴 B862AV3.2M 且搭载晨星处理器&#xff0c;同时备份好设备中的重要数据&#xff0c;刷机有风险&#xff0c;操作需谨慎&#xff01;以下是详细的刷机步骤&#xff1a; 一、准备工作 下载刷机固件&#xff1a;从可靠的来…

计算机网络:TCP/IP协议(从 MAC 地址到 VLAN 标签:数据链路层如何重构网络拓扑逻辑)

目录 前言数据链路层MAC地址共享介质型网络争用方式令牌传递方式 非共享介质网络根据MAC地址进行转发环路检测技术生成树源路由法 VLAN以太网帧格式 总结写在文末 前言 本期开始将分层进行讲解OSI参考模型或者TCP/IP参考模型&#xff0c;从数据链路到应用层&#xff0c;本期先…

基于 LLM 的商城智能客服助理开发实战

参考LLM开源文档 Datawhale LLM教程&#x1f310;&#x1f4da; 文章目录 &#x1f4a1;实现思路&#x1f680;实现步骤&#x1f4ca; 数据集介绍⚙️ 数据处理&#x1f4dd; 评估输入&#x1f50d; 提取商品关键词&#x1f50d; 检索商品信息&#x1f4dd; 生成并评估回答✨ …

电子电器架构 --- OTA测试用例分析(中)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

安卓逆向篇LSP 模块HOOK 添加技术绕过检测算法解密逻辑验证

前置解释&#xff1a; 0 、 Magisk &#xff1a; 是当前 Android 社区用来获取 root 权限的主流方式开源工具 1 、 LSP 框架&#xff1a; XPosed 框架因只支持安卓 8 及以下&#xff0c;故高版本应使用 MagiskLSPosed 2 、 HOOK 技术&#xff1a; 钩子技术&…

网络攻防技术一:绪论

文章目录 一、网络空间CyberSpace1、定义2、基本四要素 二、网络空间安全1、定义2、保护对象3、安全属性4、作用空间 三、网络攻击1、攻击分类2、攻击过程 四、网络防护1、定义2、安全模型3、安全服务5类4、特定安全机制8种5、普遍性安全机制5种 五、网络安全技术发展简史1、第…

李臻20242817_安全文件传输系统项目报告_第14周

安全文件传输系统项目报告&#xff08;第 14 周&#xff09; 1. 代码链接 Gitee 仓库地址&#xff1a;https://gitee.com/li-zhen1215/homework/tree/master/Secure-file 代码结构说明&#xff1a; SecureFileTransfer/ ├── client/ # 客户端主目…

分布式流处理与消息传递——Paxos Stream 算法详解

Java 实现 Paxos Stream 算法详解 一、Paxos Stream 核心设计 #mermaid-svg-cEJcmpaQwLXpEbx9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cEJcmpaQwLXpEbx9 .error-icon{fill:#552222;}#mermaid-svg-cEJcmpaQw…

设计模式——观察者设计模式(行为型)

摘要 本文详细介绍了观察者设计模式&#xff0c;包括其定义、结构、实现方式、适用场景以及实战示例。通过代码示例展示了如何在Spring框架下实现观察者模式&#xff0c;以及如何通过该模式实现状态变化通知。同时&#xff0c;对比了观察者模式与消息中间件在设计理念、耦合程…