RabbitMQ(集群相关部署)

RabbitMQ

集群部署

环境准备:阿里云centos8 服务器,3台服务器,分别进行安装;

下载Erlang

ErlangRabbitMQ版本对照:https://www.rabbitmq.com/which-erlang.html

  1. 创建yum库配置文件
vim /etc/yum.repos.d/rabbitmq.repo
  1. 内容
# 内容 - 来自官方文档:https://www.rabbitmq.com/docs/install-rpm
# In /etc/yum.repos.d/rabbitmq.repo
##
## Zero dependency Erlang RPM
##
[modern-erlang]
name=modern-erlang-el8
# uses a Cloudsmith mirror @ yum.novemberain.com in addition to its Cloudsmith upstream.
# Unlike Cloudsmith, the mirror does not have any traffic quotas
baseurl=https://yum1.novemberain.com/erlang/el/8/$basearchhttps://yum2.novemberain.com/erlang/el/8/$basearchhttps://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/8/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md[modern-erlang-noarch]
name=modern-erlang-el8-noarch
# uses a Cloudsmith mirror @ yum.novemberain.com.
# Unlike Cloudsmith, it does not have any traffic quotas
baseurl=https://yum1.novemberain.com/erlang/el/8/noarchhttps://yum2.novemberain.com/erlang/el/8/noarchhttps://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/8/noarch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.keyhttps://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md[modern-erlang-source]
name=modern-erlang-el8-source
# uses a Cloudsmith mirror @ yum.novemberain.com.
# Unlike Cloudsmith, it does not have any traffic quotas
baseurl=https://yum1.novemberain.com/erlang/el/8/SRPMShttps://yum2.novemberain.com/erlang/el/8/SRPMShttps://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/rpm/el/8/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.keyhttps://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1##
## RabbitMQ Server
##[rabbitmq-el8]
name=rabbitmq-el8
baseurl=https://yum2.novemberain.com/rabbitmq/el/8/$basearchhttps://yum1.novemberain.com/rabbitmq/el/8/$basearchhttps://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/8/$basearch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.keyhttps://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md[rabbitmq-el8-noarch]
name=rabbitmq-el8-noarch
baseurl=https://yum2.novemberain.com/rabbitmq/el/8/noarchhttps://yum1.novemberain.com/rabbitmq/el/8/noarchhttps://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/8/noarch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.keyhttps://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md[rabbitmq-el8-source]
name=rabbitmq-el8-source
baseurl=https://yum2.novemberain.com/rabbitmq/el/8/SRPMShttps://yum1.novemberain.com/rabbitmq/el/8/SRPMShttps://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/rpm/el/8/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
gpgcheck=0
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
  1. 更新yum库
# --nobest表示所需安装包即使不是最佳选择也接受
yum update -y --nobest
  1. 进行安装
yum install -y erlang

安装RabbitMQ

ErlangRabbitMQ版本对照:https://www.rabbitmq.com/which-erlang.html

# 导入GPG密钥,如失败多重试几次
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc'
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key'
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key'# 下载 RPM 包
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.0/rabbitmq-server-3.13.0-1.el8.noarch.rpm# 安装
rpm -ivh rabbitmq-server-3.13.0-1.el8.noarch.rpm

进行配置

# 启用管理界面插件
rabbitmq-plugins enable rabbitmq_management# 启动 RabbitMQ 服务:
systemctl start rabbitmq-server# 将 RabbitMQ 服务设置为开机自动启动
systemctl enable rabbitmq-server# 新增登录账号密码 - 用户名 密码
rabbitmqctl add_user yan 123456# 设置登录账号权限,该用户设置角色是administrator管理员。再设置权限
rabbitmqctl set_user_tags yan administrator
rabbitmqctl set_permissions -p / yan ".*" ".*" ".*"# 配置所有稳定功能 flag 启用
rabbitmqctl enable_feature_flag all# 重启RabbitMQ服务生效
systemctl restart rabbitmq-server# 停止RabbitMQ服务
rabbitmqctl stop_app

首尾配置

# 删除yum库配置文件,避免下次yum安装在执行一遍
rm -rf /etc/yum.repos.d/rabbitmq.repo# 分别在不同服务器修改主机名称
vim /etc/hostname
# 分别起名 node1、node2、node3
# 例子:机器1,该文件/etc/hostname 下 填写node1
#      机器2,该文件/etc/hostname 下 填写node2
#      机器3,该文件/etc/hostname 下 填写node3

集群配置

机器1配置:

  1. 分别在3台机器设置IP 地址到对应主机名称的映射

    修改文件/etc/hosts,追加如下内容:

    ip1 node01
    ip2 node02
    ip3 node03
    
  2. 查看该MQ的Cookie值并记录

    cat /var/lib/rabbitmq/.erlang.cookie
    # 并记录该值,后续机器2,机器3上的cookie值保持一致
    
  3. 重置节点应用

    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl start_app
    

机器2配置:

  1. 分别在3台机器设置IP 地址到对应主机名称的映射

    修改文件/etc/hosts,追加如下内容:

    ip1 node01
    ip2 node02
    ip3 node03
    
  2. 查看该MQ的Cookie值并记录

    cat /var/lib/rabbitmq/.erlang.cookie
    # 把机器1上的cookie值复制到这里,与机器1保持一致
    
  3. 重置节点应用,并加入集群

    rabbitmqctl stop_app
    rabbitmqctl reset
    # 加入集群,去node01机器上找rabbit的程序,进行加入
    rabbitmqctl join_cluster rabbit@node01
    rabbitmqctl start_app
    

机器3配置:

  1. 分别在3台机器设置IP 地址到对应主机名称的映射

    修改文件/etc/hosts,追加如下内容:

    ip1 node01
    ip2 node02
    ip3 node03
    
  2. 查看该MQ的Cookie值并记录

    cat /var/lib/rabbitmq/.erlang.cookie
    # 把机器1上的cookie值复制到这里,与机器1保持一致
    
  3. 重置节点应用,并加入集群

    rabbitmqctl stop_app
    rabbitmqctl reset
    # 加入集群,去node01机器上找rabbit的程序,进行加入
    rabbitmqctl join_cluster rabbit@node01
    rabbitmqctl start_app
    
  4. 查看集群状态

    rabbitmqctl cluster_status
    # 也可以在图形化界面上,查看集群节点,在Nodes这里查看集群节点
    

负载均衡

一般MQ的服务端口5672、UI管理界面端口15672

浏览器访问,某个端口,通过HAProxy工具,进行分流每个节点的15672端口上,进行管理UI上的负载均衡;

服务端访问,某个端口,通过HAProxy工具,进行分流每个节点的5672端口上,进行服务端的负载均衡;

安装HAProxy

yum install -y haproxy
# 查看安装的版本
haproxy -v
# 启动该程序
systemctl start haproxy
# 设置该服务开机自动启动
systemctl enable haproxy

修改配置文件

  1. 修改配置文件

    vim /etc/haproxy/haproxy.cfg
    

    文件内容:

    # 在最后一行添加该内容,该部分配置UI管理器上的负载均衡
    # 起MQ的UI的名字(rabbitmq_ui_frontend),前端部分配置
    frontend rabbitmq_ui_frontend
    # 绑定一个地址,端口号,外部浏览器访问该IP地址和端口后,然后通过HAProxy进行转发
    bind 192.168.xxx.xxx:22222
    # http协议
    mode http
    # 默认的后端服务名,使用下面的名字
    default_backend rabbitmq_ui_backend# 起MQ的服务端的名字(rabbitmq_ui_backend)
    backend rabbitmq_ui_backend
    # http协议
    mode http
    # 启用轮询的负载均衡
    balance roundrobin
    option httpchk GET /
    # 分别设置,不同的MQ服务节点的IP地址
    server rabbitmq_ui1 192.168.xxx.1:15672 check
    server rabbitmq_ui2 192.168.xxx.2:15672 check
    server rabbitmq_ui3 192.168.xxx.3:15672 check# 配置服务端(生产者、消费者)的负载均衡
    # 服务端(生产者、消费者)的名字
    frontend rabbitmq_frontend
    # 绑定一个地址,端口号,服务端(生产者、消费者)访问该IP地址和端口后,然后通过HAProxy进行转发
    bind 192.168.xxx.xxx:11111
    # tcp协议
    mode tcp
    default_backend rabbitmq_backend
    # 与上面的名字保持一致
    backend rabbitmq_backend
    # tcp协议
    mode tcp
    # 启用轮询的负载均衡
    balance roundrobin
    # 分别设置,不同的MQ服务节点的IP地址
    server rabbitmq1 192.168.xxx.1:5672 check
    server rabbitmq2 192.168.xxx.2:5672 check
    server rabbitmq3 192.168.xxx.3:5672 check
    
  2. 设置SELinux策略,允许HAProxy拥有权限连接任意端口:

    # 保存上面的配置文件,执行下面
    setsebool -P haproxy_connect_any=1
    

    SELinux是Linux系统中的安全模块,它可以限制进程的权限以提高系统的安全性。在某些情况下,SELinux可能会阻止HAProxy绑定指定的端口,这就需要通过设置域(domain)的安全策略来解决此问题。通过执行setsebool -P haproxy_connect_any=1命令,您已经为HAProxy设置了一个布尔值,允许HAProxy连接到任意端口。这样,HAProxy就可以成功绑定指定的socket,并正常工作。

  3. 重启HAProxy

    systemctl restart haproxy
    

配置成功

# 访问MQ管理UI页面:
http://192.168.xxx.xxx:22222
# 生产者、消费者服务连接MQrabbitmq:host: 192.168.xxx.xxxport: 11111username: guestpassword: 123456
# 可通过生产者发送消息,监听消费者是否接受到消息

仲裁队列

仲裁队列是3.8版本以后才有的新功能,是主从模式,支持主从数据同步,在添加队列,队列类型为Quorum就是仲裁队列。

创建交换机

与之前创建普通交换机一致

创建仲裁队列
在这里插入图片描述

绑定交换机

与之前的一致

验证,停止某个节点

# 停止rabbit应用
rabbitmqctl stop_app
# 我们在某个节点进行停止MQ,然后生产者发送消息,查看消费者是否可以接受到,判断集群的数据一致性
# 默认,主节点挂掉,默认重新选举新的主节点

流式队列

流式队列是3.9版本以后才有的新功能,每个消息都分配一个偏移量,该消息被消费掉也不会被删除,可以重复消费;类似Kafka,但没有达到Kafka的效果。

前提准备 - 安装相关插件

# 启用Stream插件
rabbitmq-plugins enable rabbitmq_stream# 重启rabbit应用
rabbitmqctl stop_app
rabbitmqctl start_app# 查看插件状态
rabbitmq-plugins list

负载均衡配置

frontend rabbitmq_stream_frontend
bind 192.168.xxx.100:33333
mode tcp
default_backend rabbitmq_stream_backendbackend rabbitmq_stream_backend
mode tcp
balance roundrobin
# 它的端口是5552
server rabbitmq1 192.168.xxx.1:5552 check
server rabbitmq2 192.168.xxx.1:5552 check
server rabbitmq3 192.168.xxx.2:5552 check

JAVA相关代码

// 引包
<dependencies><dependency><groupId>com.rabbitmq</groupId><artifactId>stream-client</artifactId><version>0.15.0</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency>
</dependencies>

创建Stream,不需要创建交换机

// 代码创建
Environment environment = Environment.builder().host("192.168.xxx.1").port(33333).username("用户名").password("密码").build();environment.streamCreator().stream("stream.atguigu.test2").create();
environment.close();

通过管理UI页面创建的话,队列类型选择:Stream

生产者

Environment environment = Environment.builder().host("192.168.xxx.1").port(33333).username("用户名").password("密码").build();Producer producer = environment.producerBuilder()// 队列名称.stream("stream.test").build();
// 消息内容
byte[] messagePayload = "hello rabbit stream".getBytes(StandardCharsets.UTF_8);CountDownLatch countDownLatch = new CountDownLatch(1);
producer.send(producer.messageBuilder().addData(messagePayload).build(),confirmationStatus -> {if (confirmationStatus.isConfirmed()) {System.out.println("[生产者端]the message made it to the broker");} else {System.out.println("[生产者端]the message did not make it to the broker");}countDownLatch.countDown();});countDownLatch.await();
producer.close();
environment.close();

消费者

Environment environment = Environment.builder().host("192.168.xxx.1").port(33333).username("用户名").password("密码").build();
environment.consumerBuilder()// 队列名称.stream("stream.test")// 这个是消费端起名字.name("stream.test.consumer").autoTrackingStrategy().builder().messageHandler((offset, message) -> {// 接受消息byte[] bodyAsBinary = message.getBodyAsBinary();String messageContent = new String(bodyAsBinary);System.out.println("[消费者端]messageContent = " + messageContent + " Offset=" + offset.offset());}).build();

指定偏移量消费

// 指定Offset消费
Environment environment = Environment.builder().host("192.168.xxx.1").port(33333).username("用户名").password("密码").build();CountDownLatch countDownLatch = new CountDownLatch(1);
Consumer consumer = environment.consumerBuilder().stream("stream.test").offset(OffsetSpecification.first()).messageHandler((offset, message) -> {byte[] bodyAsBinary = message.getBodyAsBinary();String messageContent = new String(bodyAsBinary);System.out.println("[消费者端]messageContent = " + messageContent);countDownLatch.countDown();}).build();countDownLatch.await();
consumer.close();

Federation插件

它是MQ在不同的Broker节点之间进行消息传递而无须建立集群,可以实现跨集群的数据同步。

Federation交换机

  1. 前提准备:启用该插件、分为上游和下游,创建2个独立的MQ服务;

    # 使用docker进行安装MQ1服务
    docker run -d \
    --name rabbitmq-shenzhen \
    -p 51000:5672 \
    -p 52000:15672 \
    -v rabbitmq-plugin:/plugins \
    -e RABBITMQ_DEFAULT_USER=guest \
    -e RABBITMQ_DEFAULT_PASS=123456 \
    rabbitmq:3.13-management# 使用docker进行安装MQ2服务
    docker run -d \
    --name rabbitmq-shanghai \
    -p 61000:5672 \
    -p 62000:15672 \
    -v rabbitmq-plugin:/plugins \
    -e RABBITMQ_DEFAULT_USER=guest \
    -e RABBITMQ_DEFAULT_PASS=123456 \
    rabbitmq:3.13-management
    
  2. 启用插件

    # 分别在2台MQ服务,进行安装该插件
    rabbitmq-plugins enable rabbitmq_federation
    rabbitmq-plugins enable rabbitmq_federation_management
    

    安装完插件,在右侧菜单栏可看到

  3. 添加上游连接端点

    下游的MQ服务,进行操作,点击右侧Federation Upstreams,进行添加,需要起一个上游的连接点名字,(federation-upstreams),URL填写:amqp://用户名:密码@访问ip:端口 (是上游的可访问的地址)

    在这里插入图片描述

  4. 创建控制策略

    进行配置,在下游的MQ服务,进行操作

    在这里插入图片描述

  5. 验证

    # 需要满足:
    # 普通交换机和联邦交换机名称要一致
    # 交换机名称要能够和策略正则表达式匹配上
    # 发送消息时,两边使用的路由键也要一致
    # 队列名称不要求一致
    

    在这里插入图片描述
    生产者(上游)发送消息、消息会被上游(MQ)的队列接收到,然后下游(MQ)的队列也会接受到消息;

    满足不同集群进行数据同步;

Federation队列

Federation队列和Federation交换机的最核心区别就是:

  • Federation Police作用在交换机上,就是Federation交换机
  • Federation Police作用在队列上,就是Federation队列

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

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

相关文章

生物墨水:3D组织生物打印的基石

生物墨水是3D组织生物打印技术的核心组成部分。生物墨水通常由生物材料&#xff08;如水凝胶聚合物&#xff09;与所需的细胞和/或其他生物大分子&#xff08;例如生长因子&#xff09;混合而成。为了成功地进行组织生物打印&#xff0c;生物墨水必须满足以下要求&#xff1a; …

为什么要设计DTO类

为什么要使用DTO类&#xff0c;下面以新增员工接口为例来介绍。 新增员工 1.1 需求分析和设计 1.1.1 产品原型 一般在做需求分析时&#xff0c;往往都是对照着产品原型进行分析&#xff0c;因为产品原型比较直观&#xff0c;便于我们理解业务。 后台系统中可以管理员工信息…

Bug记录:【com.fasterxml.jackson.databind.exc.InvalidDefinitionException】

bug记录 序列化错误 异常com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 完整错误(主要是FAIL_ON_EMPTY_BEANS) 00:15:20.250 [http-nio-3000-exec-1] ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] - S…

数据驱动的内容优化:Kompas.ai如何提升内容表现

在数字化营销时代&#xff0c;内容是企业与用户沟通的重要桥梁。然而&#xff0c;随着信息量的爆炸性增长&#xff0c;如何让内容在激烈的竞争中脱颖而出&#xff0c;成为每个营销人员面临的问题。数据驱动的内容优化策略&#xff0c;通过精准分析和科学决策&#xff0c;帮助品…

线程安全(一)Java锁(锁分类、锁升级、锁优化)

目录 一、乐观锁二、悲观锁三、自旋锁3.1 自旋锁的优缺点:3.2 自旋锁的时间阈值:3.3 自旋锁的开启:四、Synchronized 同步锁4.1 Synchronized 作用范围:4.2 Synchronized 核心组件:4.3 Synchronized 实现:4.4 Synchronize 补充:五、ReentractLock 锁5.1 Lock 接口的主要…

业务发展中 10 个最佳的 OKR 示例

业务发展是推动组织增长、培养合作伙伴关系和扩大市场覆盖范围的重要职能。目标和关键结果 (OKR) 可以作为推动业务发展工作和实现战略目标的强大工具。在这里&#xff0c;我们展示了业务发展中的十个最佳 OKR 示例&#xff0c;为旨在在该领域脱颖而出并实现其增长目标的组织提…

产品体验周刊第2期(2024-7-8)

产品体验 阿里系产品的营销活动 无论是支付宝&#xff0c;饿了么&#xff0c;咸鱼等&#xff0c;产品的营销活动频次过高&#xff0c;且几乎任何一个活动页都让人无法理解想要表达什么&#xff0c;只有满屏的红包、优惠等字眼&#xff0c;开始对这类活动脱敏也是基于这些产品…

【漏洞复现】方正全媒体采编系统——SQL注入

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 方正全媒体采编系统&#xff08;FZMediaEditor&#xff09;是一…

在pycharm中使用jupyter

在pycharm中使用jupyter 前置条件&#xff1a;你的环境中应该有juptyer &#xff0c;没有的话 pip install jupyter 点击项目目录&#xff0c;右键->new->jupyter notebook 打开file settings 找到 jupyter server &#xff08;按照默认的用代理服务器就行&#xff09; P…

大连外贸建站公司wordpress主题模板

Robonaut萝卜纳特WP外贸站模板 适合用于工业机器人公司出口做外贸搭建公司官方网站使用的WordPress模板。 https://www.jianzhanpress.com/?p7091 优衣裳WordPress外贸建站模板 简洁的wordpress外贸独立站模板&#xff0c;适合服装、衣服、制衣外贸公司搭建公司官方网站使用…

python- Flask模块 demo

文章目录 前言python- Flask模块 demo1. 主要特点2. demo 准备工作3. demo 实例4. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c…

前端JS特效第21集:HTML5响应式多种切换效果轮播大图切换js特效代码

HTML5响应式多种切换效果轮播大图切换js特效代码&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-t…

分别通过LS和RML进行模型参数辨识matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 最小二乘法(LS)参数辨识 4.2 递归最大似然估计(RML)参数辨识 5.完整程序 1.程序功能描述 分别通过LS和RML进行模型参数辨识matlab仿真&#xff0c;仿真输出参数辨识的误差&#xff0c…

InvalidVersionSpecError: Invalid version spec: =2.7解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

微软Edge浏览器全解析:从速度到安全性的全面体验

微软Edge浏览器&#xff0c;自2015年首次亮相以来&#xff0c;已经成为了浏览器市场上不可忽视的一股力量。它不仅集成了Windows 10的许多原生功能&#xff0c;还在速度和安全性上进行了大量的优化。本文将全面解析微软Edge浏览器的各项特性&#xff0c;带您领略这款浏览器的魅…

idea 默认路径修改

1.查看 idea 的安装路径&#xff08;右键点击 idea 图标&#xff0c;查看路径 &#xff09; “C:\Program Files\JetBrains\IntelliJ IDEA 2021.3.1\bin\idea64.exe” 在 bin 目录查看 idea.properties 文件&#xff0c;修改以下四个路径文件 # idea.config.path${user.home}/…

超高精电容传感器PCAP01调试+LABVIEW数据可视化调试手记

PCAP01超高精电容传感芯片STM32LabView可视化 文章目录 PCAP01超高精电容传感芯片STM32LabView可视化一、PCAP01介绍1.1、PCAP01引脚定义1.2、电容测量1.3、温度测量1.4、PCAP典型测试电路 二、PCAP01的STM32驱动2.1、SPI协议配置2.2、PCAP01浮空电容测量内部温度测量操作流程 …

Java Swing 5种布局管理器基本示例

在Java Swing中&#xff0c;常用的布局管理器有BorderLayout、FlowLayout、GridLayout、BoxLayout和GridBagLayout。最灵活的是GridBagLayout。 基本使用如下&#xff0c; borderlayout&#xff0c; import javax.swing.*; import java.awt.*;public class borderlay {publi…

yum install epel-release 遇到的问题

问题&#xff1a; 安装epel的时候,执行 yum install -y epel-release 报错“Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7&archx86_64&repoos&infrastock error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.…

读人工智能全传06逻辑编程

1. 现代逻辑 1.1. 到了20世纪初&#xff0c;现代逻辑的基本框架已经大致建立起来&#xff0c;当时确立的逻辑运算系统&#xff0c;直至如今仍然能够支撑数学家几乎所有的逻辑推理工作 1.1.1. 这个系统被称为一阶逻辑&#xff0c;一阶逻辑是数学和推理的通用语言 1.1.2. 这个…