太细了有手就行,SpringCloud Alibaba+Nacos+Dubbo整合

SpringCloud Alibaba+Nacos+Dubbo,文末有完整项目代码链接

  • 前言
  • 一、这几者之间关系
  • 二、准备工作
    • 1.Nacos
    • 2.SpringCloud Alibaba
    • 4.SpringCloud
    • 5.Dubbo
    • 项目中层级关系
  • 三、代码调用逻辑
    • 1.dubbo-api模块
    • 2.account-api模块
    • 3.api-service模块
    • 4.逻辑梳理
  • 四、Maven和配置
    • 1.parent的pom.xml文件
    • 2.dubbo-api的pom.xml文件
    • 3.api-service的application.yml和pom.xml
    • 4.account-service的application.yml和pom.xml
  • 五、容易踩坑的点重点说明
    • 1.循环依赖问题
    • 2.dubbo端口问题
    • 3.关闭服务检查
    • 4.nacos鉴权问题
    • 5.namespace的问题
    • 6.订阅问题
    • 7.版本适配问题
    • 8.Maven依赖问题
  • 五、完整项目

前言

本文是几种技术的结合,里面详细的描述了一个简单的框架是怎么搭建起来的,并且包含了版本依赖和各种踩坑经历,文末附有完整项目链接,有需要的可以免费拿走,如果对你有帮助麻烦点个赞哦。

一、这几者之间关系

Dubbo是阿里出的一套RPC框架
Spring Cloud Alibaba是阿里遵循Spring Cloud规范实现的一套以Alibaba自研组件组成的整体解决方
案,其中涵盖的Dubbo作为RPC,Nacos作为注册中心和配置中心以及其他阿里出品的优秀框架。
为什么要封装这一层呢,其实有两个原因:

  • Dubbo是Dubbo的调用协议,是长连接,Spring Cloud是HTTP协议属于短连接,所以Dubbo比SpringCloud调用速度快。
  • 阿里想开发一套自己的微服务框架,包括Dubbo和Nacos这些都是阿里的产品,而且封装了SpringCloud后还能享受到SpringCloud生态带来的各种优势,包括熔断,监控,网关等等各种。

在本文项目中的体现,就是Dubbo和Spring Cloud Alibaba和Spring Cloud的依赖都要添加,下面会详
说。

二、准备工作

版本用对很关键,我在版本上踩坑了很多,如果无特殊要求,直接用我这个版本

1.Nacos

我用的虚拟机,采用Docker安装的,详情参考我的这篇文章:Docker安装nacos并开启鉴权,在本文编写的时间,最新的Nacos版本是2.4.1,是有鉴权的版本,建议大家Nacos版本都用2.2之后的,开启鉴权。
当然,你也可以在Windows本地下载Nacos安装,也很简单,效果都是一样的。

2.SpringCloud Alibaba

根据官方的版本发布公告:版本发布说明,我选择的版本是2021.0.6.0版本
在这里插入图片描述

4.SpringCloud

选择2021.0.6版本

5.Dubbo

由于SpringCloud Alibaba2021.1版本之后,Dubbo不在随SpringCloud Alibaba主干更新,所以我们要在项目中单独引入Dubbo的依赖,本文引入的是3.2.14版本的dubbo-bom。
dubbo-bom:是Dubbo的统一版本管理工具,类似于Maven中dependencyManagement的功能

项目中层级关系

demo
  --dubbo-api
   --pom.xml
  --api-service
   --pom.xml
  --acount-service
   --pom.xml
 -pom.xml
1.demo作为parent层的存在,统一管理Maven依赖。
2.dubbo-api和api-service和acount-service属于平级的子模块。
3.dubbo-api:提供统一远程调用接口,供给其他子模块用,接口的实现在各自子模块内部进行。
4.account-service:模仿用户模块
5.api-service:模仿业务模块
直接给张图吧:
在这里插入图片描述

三、代码调用逻辑

1.dubbo-api模块

添加account的通用调用接口AccountService ,添加方法testDubbo:

public interface AccountService {void testDubbo(String value);
}

2.account-api模块

实现AccountService 接口,模拟其他模块调用testDubbo方法:
此处记得一定加上@DubboService注解

@DubboService
public class AccountDubboService implements AccountService {@Overridepublic void testDubbo(String value) {System.out.println(value);}
}

3.api-service模块

创建testcontroller,引入dubbo-api模块的接口AccountService

@RestController
@RequestMapping("/test")
public class TestController {@DubboReference(mock = "com.wq.dubbo.mock.AccountServiceMock")AccountService accountService;@RequestMapping("/testTwo")public void testTwo() {accountService.testDubbo("api->account");}
}

记得此处一定加上@DubboReference注解
mock参数:如果AccountService 远程调用失败,则调用mock参数里面的类的方法,其实dubbo默认的规则就是在调用失败,自动找mock方法,比如:AccountService ->AccountServiceMock,FriendService->FriendServiceMock,但是此处DubboReference注解里如果不指定mock参数,有时候会找不到,所以我习惯性加上。
我们来看看AccountServiceMock:

public class AccountServiceMock implements AccountService {@Overridepublic void testDubbo(String value) {System.out.println("调用Account失败");}
}

4.逻辑梳理

我用一张图来梳理下流程,还是很简单的:
在这里插入图片描述
我们在TestController调用参数传入:“api->account”,调用成功后,会在account-api模块控制台输出这个参数。

四、Maven和配置

1.parent的pom.xml文件

里面集成了子模块,并且用<dependencyManagementsd>来管理,记得一定要分清<dependencyManagement>和<dependencies>之间的关系,我写了注释的。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><packaging>pom</packaging><modules><module>account-service</module><module>api-service</module><module>dubbo-api</module><module>friend-service</module></modules><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><properties><java.version>11</java.version><spring-boot.version>2.7.18</spring-boot.version><spring-cloud-alibaba.version>2021.0.6.0</spring-cloud-alibaba.version><spring.cloud.version>2021.0.6</spring.cloud.version><mysql.version>8.0.20</mysql.version><hutol.version>5.5.7</hutol.version><dubbo.version>3.2.14</dubbo.version><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><!-- 配置在此模块下的,子模块自动引入依赖--><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies><!-- 统一管理,配置在此模块下的,子模块要引入依赖必须声明groupId和artifactId,不需要声明版本--><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>${project.groupId}</groupId><artifactId>dubbo-api</artifactId><version>${project.version}</version></dependency><dependency><groupId>${project.groupId}</groupId><artifactId>api-service</artifactId><version>${project.version}</version></dependency><dependency><groupId>${project.groupId}</groupId><artifactId>friend-service</artifactId><version>${project.version}</version></dependency><dependency><groupId>${project.groupId}</groupId><artifactId>account-service</artifactId><version>${project.version}</version></dependency><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><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>${hutol.version}</version></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-bom</artifactId><version>${dubbo.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>

2.dubbo-api的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>demo</artifactId><groupId>com.example</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>dubbo-api</artifactId><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency></dependencies></project>

3.api-service的application.yml和pom.xml

application.yml:

server:port: 8080
dubbo:application:name: api-serviceregistry:address: nacos://172.16.72.132:8848?namespace=e8942369-0b37-44a0-b711-3927db1796adusername: nacospassword: nacosconsumer:check: falsescan:base-packages: com.wq.dubboprotocol:name: dubboport: -1cloud:subscribed-services: friend-service,account-service
spring:cloud:nacos:discovery:server-addr: 172.16.72.132:8848namespace: df115cd8-6506-4417-bc91-4ee08a8ec2f1username: nacospassword: nacosconfig:server-addr: 172.16.72.132:8848namespace: 76dae550-4133-44d8-b591-dc82f5f97b6eusername: nacospassword: nacosapplication:name: api-servicemain:allow-circular-references: truedatasource:url: jdbc:mysql://172.16.72.132:3306/mytest?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8&useUnicode=trueusername: rootpassword: 12345

pom.xml:本项目我以前集成了Mybatis-Plus,所以Maven和项目有部分数据库相关的,如果你不需要可以删掉,不会影响Rpc调用逻辑。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>demo</artifactId><groupId>com.example</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>api-service</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.example</groupId><artifactId>dubbo-api</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.2</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency></dependencies>
</project>

4.account-service的application.yml和pom.xml

application.yml:

server:port: 8081
dubbo:application:name: account-serviceregistry:address: nacos://172.16.72.132:8848?namespace=e8942369-0b37-44a0-b711-3927db1796adusername: nacospassword: nacosconsumer:check: falsescan:base-packages: com.wq.dubboprotocol:name: dubboport: -1cloud:subscribed-services: api-service,friend-service
spring:cloud:nacos:discovery:server-addr: 172.16.72.132:8848namespace: df115cd8-6506-4417-bc91-4ee08a8ec2f1username: nacospassword: nacosconfig:server-addr: 172.16.72.132:8848namespace: 76dae550-4133-44d8-b591-dc82f5f97b6eusername: nacospassword: nacosapplication:name: account-servicemain:allow-circular-references: truedatasource:url: jdbc:mysql://172.16.72.132:3306/mytest?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2b8&useUnicode=trueusername: rootpassword: 12345

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>demo</artifactId><groupId>com.example</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>account-service</artifactId><dependencies><dependency><groupId>com.example</groupId><artifactId>dubbo-api</artifactId></dependency><dependency><groupId>com.example</groupId><artifactId>api-service</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.7.18</version><configuration><mainClass>com.wq.AccountApplication</mainClass></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
</project>

五、容易踩坑的点重点说明

1.循环依赖问题

springboot和dubbo不是最新版本引起的,加入一下配置,允许就行。

spring:main:allow-circular-references: true

2.dubbo端口问题

这里是dubbo的SPI扩展,name不能随便写,用dubbo就行了,port填-1是从20880自增

dubbo:protocol:name: dubboport: -1

3.关闭服务检查

此处不检查,启动的时候会报错,比如consumer先启动,但是provider未启动,这时候就会报错

dubbo:consumer:check: false

4.nacos鉴权问题

dubbo和nacos都要填写username和password,不填会启动报错

dubbo:registry:username: nacospassword: nacos
spring:cloud:nacos:discovery:username: nacospassword: nacosconfig:username: nacospassword: nacos

5.namespace的问题

这个问题我以前用的时候没遇到,但是这次遇到了,就是dubbo的namespace和nacos中discovery、config的namespace不能一样,不然启动会报错。

6.订阅问题

在yml中的subscribed-services参数,指定订阅的服务,可以订阅自己,不然项目启动后,控制台会定时打印日志,提示你不订阅的话消耗CPU性能。

7.版本适配问题

请一定参照官网发布的版本适配说明去选择版本:版本发布说明

8.Maven依赖问题

这个问题比较小,涉及到父子模块的依赖引入,和dubbo和SpringCloud alibaba的引入,大家照着我项目来就行。

五、完整项目

项目地址,大家根据需要用git拉取就行
https:https://gitee.com/wangqingWQ_code/DubboAndNacos.git
ssh:git@gitee.com:wangqingWQ_code/DubboAndNacos.git

PS: 项目是没有任何错误完整可运行的,我就不过多展示运行效果了,大家可以自行去试。如果本文有错误欢迎指出,对你有帮助点个赞就行了。

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

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

相关文章

尽快更新!Zyxel 路由器曝出 OS 命令注入漏洞,影响多个版本

近日&#xff0c;Zyxel 发布安全更新&#xff0c;以解决影响其多款商用路由器的关键漏洞&#xff0c;该漏洞可能允许未经认证的攻击者执行操作系统命令注入。 该漏洞被追踪为 CVE-2024-7261&#xff0c;CVSS v3 得分为 9.8&#xff0c;是一个输入验证故障&#xff0c;由用户提…

了解PD快充协议和QC快充协议

PD快充协议的实现依赖充电器与设备之间的通信协议&#xff0c;这种通信协议确保了充电器能够提供设备所需要的特定电压和电流。在快充技术中快充协议起到关键角色。 现在市面上最常见的快充协议有PD、QC、华为FCP/SCP、三星AFC协议 、VOOC闪充。PD和QC 协议属于公用协议 。华…

CSS 高级区块效果——WEB开发系列25

CSS提供了多种工具和属性&#xff0c;使我们能够创建视觉上引人注目的效果。今天我们继续将深入了解几种高级CSS效果&#xff1a;盒子阴影、滤镜、混合模式和文本背景裁剪&#xff0c;提升网页设计的质感和深度。 一、盒子阴影&#xff08;Box Shadow&#xff09; 对于盒子元素…

学会这2招,让你轻松提取长视频中的文案!

在当今数字化时代&#xff0c;短视频已成为备受欢迎的内容形式&#xff0c;众多品牌和营销人员借助短视频推广宣传产品。 短视频文案作为短视频内容的关键部分&#xff0c;能够在极短时间内向受众传达品牌信息和产品特点。 不过&#xff0c;短视频文案的提取和创作确实极具挑…

ceph中pg与pool关系

在Ceph中&#xff0c;PG&#xff08;Placement Group&#xff09;和Pool是非常重要的概念&#xff0c;它们在Ceph的存储架构中扮演着关键角色。理解这些概念有助于更好地管理和优化Ceph集群。下面详细介绍这两个概念及其相互关系。 Pool&#xff08;存储池&#xff09; 定义&am…

【重学 MySQL】十二、SQL 语言的规则与规范

【重学 MySQL】十二、SQL 语言的规则与规范 基本规则注释语法规则命名规则基本命名规则具体命名规范其他注意事项 数据导入指令 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;的规则与规范是确保SQL语句能够正确执行、提高代码可读性和可维…

【2024数模国赛赛题思路公开】国赛C题第三套思路丨无偿自提

C题参考思路 C题是一道优化问题&#xff0c;目的是根据题目所给的种植限制条件以及附件数据建立目标条件优化模型&#xff0c;优化种植策略&#xff0c;有利于方便田间管理&#xff0c;提高生产效益&#xff0c;减少各种不确定因素可能造成的种植风险。整个题目最重要的问题在…

Java框架第四课(对Spring的补充Spring web)

目录 一.Spring web的认识 (1)Spring Web概念 (2)Spring web的特点 (3)Springweb运行的流程 (4)Springweb运行的流程图 二.搭建Spring web 三.自定义处理器类搭建 (1)处理器类配置 (2)处理器类接受请求 (3)获得请求数据 四.拦截器 (1)关于拦截器&#xff1a; (2)拦截器的…

Axure中继器动态数据图表制作

在Axure RP中&#xff0c;中继器&#xff08;Repeater&#xff09;是一个非常强大的工具&#xff0c;它允许设计者动态地展示和交互数据&#xff0c;进而创建各种复杂的数据可视化图表&#xff0c;如柱状图、条形图、堆叠图、散点图和对比图。以下将详细介绍如何使用中继器来设…

持续集成与持续部署(CI/CD)的深入探讨

在现代软件开发中&#xff0c;持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;已成为不可或缺的实践。这些方法旨在加快软件交付的速度&#xff0c;同时提高软件的质量和稳定性。通过CI/CD&#xff0c;开发团队可以频繁地将代码更改集成到主分支&…

算法练习题14——leetcode84柱形图中最大的矩形(单调栈)

题目描述&#xff1a; 解题思路&#xff1a; 要解决这个问题&#xff0c;我们需要找到每个柱子可以扩展的最大左右边界&#xff0c;然后计算以每个柱子为高度的最大矩形面积。 具体步骤如下&#xff1a; 计算每个柱子左侧最近的比当前柱子矮的位置&#xff1a; 使用一个单调…

java后端保存的本地图片通过ip+端口直接访问

直接上代码吧 package com.ydx.emms.datapro.controller;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.…

函数式接口实现策略模式

函数式接口实现策略模式 1.案例背景 我们在日常开发中&#xff0c;大多会写if、else if、else 这样的代码&#xff0c;但条件太多时&#xff0c;往往嵌套无数层if else,阅读性很差&#xff0c;比如如下案例&#xff0c;统计学生的数学课程的成绩&#xff1a; 90-100分&#…

idea添加本地环境执行模版

用Flink的环境执行时&#xff0c;因为最后会打包放服务器&#xff0c;所以有些jar包将不会打包上传&#xff0c;这些jar包用<scope>provided</scope>标记 所以这些jar包在本地运行时也会不提供&#xff0c;为了程序在本地能跑&#xff0c;我们每次执行是需手动添加…

JAVA-接口(一万四千字讲解)

目录 一、接口的概念 二、语法规则 三、接口使用 四、接口特性 五、实现多个接口 六、接口间的继承 七、接口使用实例 1.Comparable 2.写一个自己的sort 3.Comparator 八、类的克隆Clonable 1.Clonable接口 2.浅拷贝 3.深拷贝 九、抽象类和接口的区别 十、 Obje…

芯片时钟树评估的关键性能参数

前面有很多文章都介绍了PI性能的影响&#xff0c;也介绍了PSIJ对信号或时钟性能的影响&#xff0c;对于SOC设计&#xff0c;为了更好的理解电源完整性在芯片设计中的重要作用&#xff0c;对芯片的时钟树设计需要足够理解才能更好的明白电源完整性的影响。 时钟分布网络设计一直…

最基本的SELECT...FROM结构

第0种&#xff1a;最基本的查询语句 SELECT 字段名&#xff0c;字段名 FROM 表名 SELECT 1&#xff1b; SELECT 11,3*2&#xff1b; FROM SELECT 11,3*2 FROM DUAL&#xff1b;#dual&#xff1a;伪表 我们可以用它来保持一个平衡 这里我们的值不需要在任何一个表里&#xf…

9、类和对象

9.1 封装 9.1.1 封装的例子 class Student { public:string name;int age; public:void setName(string name_) {name name_;} }; int main() {Student s1;s1.setName("zhangsan");return 0; }类中的行为都叫做成员&#xff0c;例如成员属性&#xff0c;成员变量&…

飞速(FS)S5800-48T4S:如何使用MLAG?

MLAG&#xff08;多机箱链路聚合组&#xff09;可实现无缝故障转移并优化带宽利用率&#xff0c;从而增强网络冗余和提高可扩展性。它允许多台交换机作为一个统一实体运行&#xff0c;从而降低停机风险并确保网络运行不中断。飞速&#xff08;FS&#xff09;S5800-48T4S是一款支…

二维高斯函数的两种形式

第一种形式很常见 多元正态分布 多元正态分布&#xff08;Multivariate Normal Distribution&#xff09;&#xff0c;也称为多变量正态分布或多维正态分布&#xff0c;是统计学中一种重要的概率分布&#xff0c;用于描述多个随机变量的联合分布。 假设有 n n n 个随机变量…