【RocketMQ 系列三】RocketMQ集群搭建(2m-2s-sync)
您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
😁 2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。
❤️ 3. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
❤️ 4. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 5. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
文章目录
- 一、集群特点
- 二、服务器环境
- 1.1.部署架构
- 1.2.服务器信息
- 1.3.配置Host (两台服务器都需要)
- 1.4. 安装jdk(两台服务器都需要)
- 1.5. 关闭防火墙(两台服务器都需要)
- 1.6. 创建数据存储目录(两台服务器都需要)
- 三、下载与安装配置
- 2.1.下载rocketmq并解压(两天服务器都要)
- 2.2. 环境变量配置(两台服务器都需要)
- 2.3. 配置 rocketmq broker-a (在Master1上操作)
- 2.4. 配置 rocketmq broker-b-s (在Slave2上配置)
- 2.5. 配置 rocketmq broker-b.properties(在Master2上操作)
- 2.6. 配置rocketmq broker-a-s.properties(在Slave1上操作)
- 2.7. 测试环境JVM配置(两台机器都要执行)
- 2.8. 生产环境JVM配置
- 四、启动集群
- 3.1.启动nameserver((两台机器上都执行)
- 3.2.启动broker
- 3.3.测试集群生产消费情况
- 3.5. 关闭命令
- 五、问题总结
- 六、安装管理面板
一、集群特点
- NameServer是一个几乎无状态的节点,可集群部署,节点之间不会互相通信。
- Broker部署相对比较复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。Master与Slave可以通过指定相同的BrokerName,不同的BrokerId来区分,BrokerId为0表示Master,BrokerId大于0表示Slave。
- Producer与NameServer集群中的其中一个节点(随机选择)建立长链接,定期从NameServer取Topic路由信息,并向Topic服务的Master建立长链接(也就是说根据Topic的路由信息找到向哪个Broker发送消息),且定时向Master发送心跳,Producer完全无状态,可集群部署。
- Consumer与NameServer集群中的其中一个节点(随机选择)建立长链接,定期从NameServer取Topic路由信息,并向Topic服务的Master,Slave建立长链接,且定时向Master,Slave发送心跳,Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅关系由Broker配置决定。
二、服务器环境
1.1.部署架构
使用的模式是 2m-2s-sync,双主双从,同步复制
1.2.服务器信息
IP | 角色 | 架构模式 |
---|---|---|
192.31.186.198 | nameserver,broker | master1,slave2 |
192.31.184.89 | nameserver,broker | master2,slave1 |
1.3.配置Host (两台服务器都需要)
-
nameserver机器信息
#nameserver 172.31.186.180 rocketmq-nameserver1 172.31.184.89 rocketmq-nameserver2 #broker 机器信息 172.31.186.180 rocketmq-master1 172.31.186.180 rocketmq-slave2 172.31.184.89 rocketmq-master2 172.31.184.89 rocketmq-slave1
配置完成之后,重启网卡。
systemctl restart network
1.4. 安装jdk(两台服务器都需要)
安装jdk-8u192-linux-x64.rpm,此处省略。
1.5. 关闭防火墙(两台服务器都需要)
首先查看防火墙的状态,如果状态是 active 则表示防火墙开启
$ systemctl status firewalld
关闭防火墙
$ systemctl stop firewalld
1.6. 创建数据存储目录(两台服务器都需要)
- 创建master节点的存储路径
mkdir -p /data/server/feige/rocketmq/store
mkdir -p /data/server/feige/rocketmq/store/commitlog
mkdir -p /data/server/feige/rocketmq/store/consumequeue
mkdir -p /data/server/feige/rocketmq/store/index
-
创建slave节点的存储路径
mkdir -p /data/server/feige/rocketmq/store-s mkdir -p /data/server/feige/rocketmq/store-s/commitlog mkdir -p /data/server/feige/rocketmq/store-s/consumequeue mkdir -p /data/server/feige/rocketmq/store-s/index
三、下载与安装配置
2.1.下载rocketmq并解压(两天服务器都要)
cd /data/server/feige
wget https://archive.apache.org/dist/rocketmq/5.1.3/rocketmq-all-5.1.3-bin-release.zip
unzip rocketmq-all-5.1.3-bin-release.zip -d /data/server/feige/rocketmq
cd /data/server/feige/rocketmq/rocketmq-all-5.1.3-bin-release
2.2. 环境变量配置(两台服务器都需要)
vim /etc/profile
在profile文件的末尾加入如下命令:
ROCKETMQ_HOME=/data/server/feige/rocketmq/rocketmq-all-5.1.3-bin-release
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
执行 source /etc/profile
使文件生效
2.3. 配置 rocketmq broker-a (在Master1上操作)
vim conf/2m-2s-sync/broker-a.properties
在此配置文件中添加,master默认的端口是10911。
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样;主从节点一样,也就是这个值区分broker组的;
brokerName=broker-a
#主从标识:0 表示Master, >0 表示Slave;同一个组中区分主从的标识,只能有一个主;
brokerId=0
#当前broker监听的IP
brokerIP1=172.31.186.180
#用于HA主从同步
brokerIP2=172.31.186.180
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
haListenPort=10912
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间使用率
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/server/feige/rocketmq/store
#commitLog存储路径
storePathCommitLog=/data/server/feige/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/data/server/feige/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/data/server/feige/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckPoint=/data/server/feige/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/data/server/feige/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE 从节点
brokerRole=SYNC_MASTER
#刷盘策略
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
2.4. 配置 rocketmq broker-b-s (在Slave2上配置)
这里为了避免与master的端口冲突,将slave的默认端口改成11011,另外还需要将从节点broker的存储路径改下,不能与master节点共用。
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#主从标识:0 表示Master, >0 表示Slave
brokerId=1
#当前broker监听的IP
brokerIP1=172.31.186.180
#用于HA主从同步
brokerIP2=172.31.186.180
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
haListenPort=11012
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/server/feige/rocketmq/store-s
#commitLog存储路径
storePathCommitLog=/data/server/feige/rocketmq/store-s/commitlog
#消费队列存储路径
storePathConsumeQueue=/data/server/feige/rocketmq/store-s/consumequeue
#消息索引存储路径
storePathIndex=/data/server/feige/rocketmq/store-s/index
#checkpoint 文件存储路径
storeCheckPoint=/data/server/feige/rocketmq/store-s/checkpoint
#abort 文件存储路径
abortFile=/data/server/feige/rocketmq/store-s/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE 从节点
brokerRole=SLAVE
#刷盘策略
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
2.5. 配置 rocketmq broker-b.properties(在Master2上操作)
执行
vim conf/2m-2s-sync/broker-b.properties
在此配置文件中添加:master默认的端口是10911。
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#主从标识:0 表示Master, >0 表示Slave
brokerId=0
#当前broker监听的IP
brokerIP1=172.31.184.89
#用于HA主从同步
brokerIP2=172.31.184.89
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
haListenPort=10912
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/server/feige/rocketmq/store
#commitLog存储路径
storePathCommitLog=/data/server/feige/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/data/server/feige/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/data/server/feige/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckPoint=/data/server/feige/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/data/server/feige/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE 从节点
brokerRole=SYNC_MASTER
#刷盘策略
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
2.6. 配置rocketmq broker-a-s.properties(在Slave1上操作)
vim conf/2m-2s-sync/broker-a-s.properties
在此配置文件中添加:将slave的默认端口改成11011。这里从节点的存储路径要与主节点区分,主和从都必须有
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#主从标识:0 表示Master, >0 表示Slave
brokerId=1
#当前broker监听的IP
brokerIP1=172.31.184.89
#用于HA主从同步
brokerIP2=172.31.184.89
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
haListenPort=11012
#删除长期无用文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间(h),默认48小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/data/server/feige/rocketmq/store-s
#commitLog存储路径
storePathCommitLog=/data/server/feige/rocketmq/store-s/commitlog
#消费队列存储路径
storePathConsumeQueue=/data/server/feige/rocketmq/store-s/consumequeue
#消息索引存储路径
storePathIndex=/data/server/feige/rocketmq/store-s/index
#checkpoint 文件存储路径
storeCheckPoint=/data/server/feige/rocketmq/store-s/checkpoint
#abort 文件存储路径
abortFile=/data/server/feige/rocketmq/store-s/abort
#限制的消息大小
maxMessageSize=65536
#broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE 从节点
brokerRole=SLAVE
#刷盘策略
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
2.7. 测试环境JVM配置(两台机器都要执行)
RocketMQ默认占用的内存是8G,比较大,这里需要修改下占用的堆内存,不然在一个机器是上同时启动两个 broker可能会启动失败。
vim bin/runbroker.sh
# 根据机器实际内存调整,这里演示的机器内存比较小,配置的值比较小
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn128m"vim bin/runserver.sh
# 根据机器实际内存调整,这里演示的机器内存比较小,配置的值比较小
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"vim bin/tools.sh
# 根据机器实际内存调整,这里演示的机器内存比较小,配置的值比较小
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"
2.8. 生产环境JVM配置
vim bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"vim bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"vim bin/tools.sh
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=128m"
四、启动集群
3.1.启动nameserver((两台机器上都执行)
nohup sh bin/mqnamesrv > /data/server/feige/rocketmq/logs/mqnamesrv.log 2>&1 &
3.2.启动broker
在192.31.186.180上执行如下命令
#1.启动Master1,在Master1上操作
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties > /data/server/feige/rocketmq/logs/broker-a.log 2>&1 &
#2.启动Slave2,在Slave 2上操作
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties > /data/server/feige/rocketmq/logs/broker-b-s.log 2>&1 &
#6、查看 NameServer(9876)和 Broker(10909、10911、10912)启动情况,在2台主机上操作
netstat -nltup|egrep "9876|10911|10912|11011|11012"
在192.31.184.89上执行如下命令:
#1.启动Master2,在Master2上操作
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties > /data/server/feige/rocketmq/logs/broker-b.log 2>&1 .启动Slave1,在Slave1上操作
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties > /data/server/feige/rocketmq/logs/broker-a-s.log 2>&1 、查看 NameServer(9876)和 Broker(10909、10911、10912)启动情况,在2台主机上操作
netstat -nltup|egrep "9876|10911|10912|11011|11012"
或者
sh bin/mqadmin clusterList -n "172.31.184.89:9876;172.31.186.180:9876"
或者
jps
3.3.测试集群生产消费情况
#在2台主机上操作
vim /etc/profile
#在文件/etc/profile中追加
export NAMESRV_ADDR="rocketmq-nameserver1:9876;rocketmq-nameserver2:9876"
#在控制台在其中1台机器上操作,启动一个生产者,在1个消费者机器就可以看到消费信息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
#在控制台其中2台机器上操作,启动2个消费者
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
这里的NAMESRV_ADDR变量名不能做任何修改,不然就可能报连不上Nameserver的错误。
正常消费成功的话,则消费者出现如下日志:
3.5. 关闭命令
#关闭broker命令:
sh bin/mqshutdown broker
#关闭namesrv命令:
sh bin/mqshutdown namesrv
五、问题总结
java.lang.RuntimeException: Lock failed,MQ already startedat org.apache.rocketmq.store.DefaultMessageStore.start(DefaultMessageStore.java:214)at org.apache.rocketmq.broker.BrokerController.start(BrokerController.java:827)at org.apache.rocketmq.broker.BrokerStartup.start(BrokerStartup.java:64)at org.apache.rocketmq.broker.BrokerStartup.main(BrokerStartup.java:58)
- 检查master节点和slave节点的端口是否冲突
- 检查master节点和slave节点的broker的存储路径是否冲突
六、安装管理面板
官网提供了两种部署方式,docker部署和源码部署,由于前面我们都是使用的直接部署,所以这里也采用官网提供的源码部署的方式。 (PS:docker 部署也尝试了,一直不行)。
-
下载源代码,源码地址:https://github.com/apache/rocketmq-dashboard/tags
-
在本地解压源码,然后,对源码进行编译打包,打包命令是:
$ mvn clean package -Dmaven.test.skip=true
然后,将生成的 rocketmq-dashboard-1.0.0.jar包上传到服务器,jar的相对路径是
target\rocketmq-dashboard-1.0.0.jar
-
运行
rocketmq-dashboard-1.0.0.jar
nohup java -jar rocketmq-dashboard-1.0.0.jar --server.port=18080 --rocketmq.config.namesrvAddr='172.31.184.89:9876;172.31.186.180:9876'>/data/server/feige/rocketmq/logs/mq-console.log 2>&1 &
这里需要指定两个参数:
--server.port=18080
设置端口是18080,因为默认的端口是8080,很可能会冲突--rocketmq.config.namesrvAddr='192.31.184.89:9876;192.31.186.180:9876'
用于指定nameserver集群的地址,不指定的话会有问题。
启动成功之后访问控制台:http://192.31.186.180:18080/
相关文章:
【RocketMQ 系列三】RocketMQ集群搭建(2m-2s-sync)
您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精…...
Go TLS服务端绑定证书的几种方式
随着互联网的发展,网站提供的服务类型和规模不断扩大,同时也对Web服务的安全性提出了更高的要求。TLS(Transport Layer Security)[1]已然成为Web服务最重要的安全基础设施之一。默认情况下,一个TLS服务器通常只绑定一个证书[2],但…...
【算法与数据结构】--高级算法和数据结构--排序和搜索
一、常见排序算法 以下是一些常见的排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。每种排序算法的讲解以及附带C#和Java示例: 1.1 冒泡排序 (Bubble Sort) 讲解: 冒泡排序是一种简单的比较排序算法。它多次遍历待排序的…...
【Java】jvm 元空间、常量池(了解)
JDK1.8 以前的 HotSpot JVM 有方法区,也叫永久代(permanent generation)方法区用于存放已被虚拟机加载的类信息,常量、静态遍历,即编译器编译后的代码JDK1.7 开始了方法区的部分移除:符号引用(S…...
Spring Boot自动加载
问:自动装配如何实现的? 答:简单来说就是自动去把第三方组件的Bean装载到IOC容器中,不需要开发人员再去写Bean相关的配置,在springboot应用里面只需要在启动类上去加上SpringBootApplication注解,就可以去实…...
MPNN 模型:GNN 传递规则的实现
首先,假如我们定义一个极简的传递规则 A是邻接矩阵,X是特征矩阵, 其物理意义就是 通过矩阵乘法操作,批量把图中的相邻节点汇聚到当前节点。 但是由于A的对角线都是 0.因此自身的节点特征会被过滤掉。 图神经网络的核心是 吸周围…...
Flink kafka 数据汇不指定分区器导致的问题
背景 在flink中,我们经常使用kafka作为flink的数据汇,也就是目标数据的存储地,然而当我们使用FlinkKafkaProducer作为数据汇连接器时,我们需要注意一些注意事项,本文就来记录一下 使用kafka数据汇连接器 首先我们看…...
【软考】14.1 面向对象基本概念/分析设计测试
《面向对象开发》 对象 现实生活中实际存在的一个实体;构成系统的一个基本单位由对象名、属性和方法组成 类 实体的形式化描述;对象是类的实例,类是对象的模板可分为:实体类:现实世界中真实的实体接口类(边…...
MFC-对话框
目录 1、模态和非模态对话框: (1)、对话框的创建 (2)、更改默认的对话框名称 (3)、创建模态对话框 1)、创建按钮跳转的界面 2)、在跳转的窗口添加类 3࿰…...
Essential Steps in Natural Language Processing (NLP)
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...
Flink中KeyBy、分区、分组的正确理解
1.Flink中的KeyBy 在Flink中,KeyBy作为我们常用的一个聚合类型算子,它可以按照相同的Key对数据进行重新分区,分区之后分配到对应的子任务当中去。 源码解析 keyBy 得到的结果将不再是 DataStream,而是会将 DataStream 转换为 Key…...
QT6集成CEF3--01 准备工作
QT6集成CEF3--01 准备工作 一、所有使用到的工具软件清单:二、准备工作三、cefclient示例程序四、特别注意 一、所有使用到的工具软件清单: CEF 二进制发行包 cef_binary_117.2.5gda4c36achromium-117.0.5938.152_windows64.tar.bz2 CMake 编译工具 cmake-3.22.6-windows-x86_…...
随机误差理论与测量
文章目录 第1节 随机误差的性质和特点第2节 随机误差的数字特性标准差的估计 第3节 单次测量结果的精度指标第4节 多次测量结果的精度指标算数平均值的分布特性与标准差算数平均值的置信度算数平均值的精度指标(常用的有4个) 第5节 非等精度测量 第1节 随机误差的性…...
树莓派4b配置通过smbus2使用LCD灯
出现报错: FileNotFoundError: [Errno 2] No such file or directory: ‘/dev/i2c-1’ 则说明没有打开I2C,可通过如下步骤进行设置 1、打开树莓派配置 sudo raspi-config2、进入Interface Options,配置I2C允许 目前很多python3版本已经不…...
UPS 原理和故障案例分享
摘要:不间断电源UPS (Uninterruptible Power System),主要是由整流器、 逆变器、静态旁路和储能装置等组成;具备高可靠性、高可用性和高质量的独立 电源。通过对收集的 UPS 故障案例进行分析,从施工,调试和运行三个方面筛选 出四个故障案例与…...
Stream流中的 max()和 sorted()方法
需求:某个公司的开发部门,分为开发 一部 和 二部 ,现在需要进行年中数据结算。分析: 员工信息至少包含了(名称、性别、工资、奖金、处罚记录)开发一部有 4 个员工、开发二部有 5 名员工分别筛选出 2 个部门…...
云上攻防-云原生篇Docker安全权限环境检测容器逃逸特权模式危险挂载
文章目录 前言1、Docker是干嘛的?2、Docker对于渗透测试影响?3、Docker渗透测试点有那些?4、前渗透-判断在Docker中方式一:查询cgroup信息方式二:检查/.dockerenv文件方式三:检查mount信息方式四࿱…...
PDE数值解中,为什么要引入弱解(weak solution)的概念?
See https://www.zhihu.com/question/24243246?utm_sourceqq&utm_mediumsocial&utm_oi1315073218793488384...
使用pdfjs实现在线预览pdf
在工作中可能会遇到前端展示pdf文件进行预览并提供下载的需求场景,例如操作指引,这个时候需要寻找一款实现该功能的插件,以pdjjs举例子 1. 安装pdf.js npm install pdfjs-dist2. 引入pdf.js import pdfjsLib from pdfjs-dist3.加载pdf文件流 这个地方区分是请求后端接口还是…...
汇编语言基础
引言 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。 基础知识 1.1机器语言 机器语言是机器指令的集合…...
格式工厂怎么把两个视频合并在一起
免费的工具谁不喜欢呢,今天为大家介绍的是格式工厂这款多功能视频转换软件,然而今天主要为大家介绍的是格式工厂的视频合并功能。 是的,你没有听错,格式工厂除了转换之外,还可以视频合适、视频剪辑、视频分割、去水印…...
2.MySQL表的操作
个人主页:Lei宝啊 愿所有美好如期而遇 表的操作 (1)表的创建 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 存储引擎的不同会导致创建表的文件不同。 换个引擎。 t…...
网络安全之应急流程
近期需要弄一个网络安全应急的流程,其实对于网络安全应急并不陌生,只是在一些特定的环境上会遇到一些难以解决的问题或者缺少某个岗位的技术人员,因为不同运营商的应急小队也是不同的岗位,如今有着安全设备的告警和预警࿰…...
[Python进阶] 操纵鼠标:pyuserinput
6.2 操纵鼠标:pyuserinput 6.2.1 说明 在安装pyuserinput库时会自动安装PyMouse和PyKeyboard库。前者主要用来操作鼠标,包括鼠标的点击、移动等。后者主要用来操作键盘,包括键盘按键的按下、弹起等。 这两个库还可以同时对鼠标和键盘的事件…...
【LeetCode】每日一题两数之和寻找正序数组的中位数找出字符串中第一个匹配项的下标在排序数组中查找元素的第一个和最后一个位置
主页点击直达:个人主页 我的小仓库:代码仓库 C语言偷着笑:C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法:算法专栏 C头…...
与HTTP相关的各种协议
TCP/IP TCP/IP协议是目前网络世界“事实上”的标准通信协议,实际上是一系列网络通信协议的统称,其中最核心的两个协议是 TCP和IP,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈。 这个协议栈有四层&#x…...
常见的网络攻击手段
网络攻击对个人、组织和整个社会都带来了严重的威胁,因此必须采取有效的安全措施来保护网络系统和用户的信息安全。网站是攻击者经常瞄准的目标,以下是一些常见的攻击方式: 1. DDoS攻击(分布式拒绝服务攻击)࿱…...
学习笔记---超基础+详细+新手的顺序表~~
目录 1.顺序表的前言 1.1 顺序表--->通讯录📇 1.2 数据结构的相关概念🏇 1.2.1 什么是数据结构 1.2.1 为什么需要数据结构 2. 顺序表概念及分类 2.1 顺序表的概念🐙 2.2 顺序表的分类🐫 2.2.1 顺序表和数组的区别 2.…...
Java高级-CompletableFuture并发编程利器
CompletableFuture核心Api 1.概述2.Async2.a) supplyAsync2.b) runAsync 3.Then3.a) thenApply()3.b) thenApplyAsync() 1.概述 Future可以在并发编程中异步获取结果 CompletableFuture实现了Future接口,肯定也会有Future的功能,也相当于是Future的一个…...
python、java、c++哪一个前景比较好?
Python是一种广泛使用的高级编程语言,适用于数据分析、人工智能、机器学习等领域。Java是一种通用的编程语言,适用于企业级应用开发、网站开发、软件开发、嵌入式领域等。C是一种系统编程语言,适用于嵌入式开发、游戏开发、音视频、服务端开发…...
做网站怎么排版/手机免费建站系统
第一篇:第二章(为圆满人生做准备) 开篇 开篇就是讲习惯很重要,习惯就像引力,坏的习惯可以阻碍我们(天天不学无术吃喝嫖赌),好的习惯可以帮助我们(天天读书天天锻炼&…...
成都高新网站建设/免费无代码开发平台
# -*- coding:utf-8 -*-题目描述 操作给定的二叉树,输出二叉树的三种遍历结果前序遍历:根左右 8 6 5 7 10 9 11 第一位是根节点 中序遍历:左根右 5 6 7 8 9 10 11 中间一位是根节点 后续遍历:左右根 5 7 6 9 10 1…...
wordpress打开html/最新全国疫情消息
它取决于您定义为必需的:没有任何头字段必须与每个响应一起发送,无论什么情况,但有真正应该发送的头字段。唯一接近的头字段是Date,但即使它有它的情况下它不是必需的。在RFC 2119的说法中,术语MUST意味着某些是规范的…...
香河网站建设/网站软件下载
转载于:https://www.cnblogs.com/panda88/p/6006372.html...
做电商网站价钱/如何推广引流
目录 简介 常用单位 lp/mm(line-pairs/mm) Cycle / pixel LW/PH(line widths/ picture height) 转换关系 MTF MTF概念 MTF50,MTF50P SFR的计算方法 参考资料: 简介 在镜头选型或者对比中&…...
无锡新吴区住房和建设交通局网站/电脑系统优化软件哪个好用
首先我们尝试构造一个乱码 第1步 我们可以在首页编写一个提交的表单,在web目录下创建form.jsp <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><title>Title</title> </head…...