当前位置: 首页 > news >正文

RocketMQ部署

一 安装mq

1.下载RocketMQ

本教程使⽤的是RocketMQ4.7.1版本,建议使⽤该版本进⾏之后的demo训练。

运⾏版:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip

源码:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.7.1/rocketmqall-4.7.1-source-release.zip

2.安装RocketMQ

  1. 准备⼀台装有Linux系统的虚拟机。本教程使⽤的是Ubuntu16.04版本。
  2. 安装jdk,上传jdk-8u191安装包并解压缩在 /usr/local/java ⽬录下。
  3. 安装rocketmq,上传rocketmq安装包并使⽤unzip命令解压缩在 /usr/local/rocketmq ⽬录下。
  4. 配置jdk和rocketmq的环境变量
export JAVA_HOME=/usr/local/java/jdk1.8.0_191
export JRE_HOME=/usr/local/java/jdk1.8.0_191/jre
export ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-all-4.7.1-binrelease
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ROCKETMQ_HOME/bin:$PATH:$HOME/bin

注意,RocketMQ的环境变量⽤来加载 ROCKETMQ_HOME/conf 下的配置⽂件,如果不配置则⽆法启动NameServer和Broker。

完成后执⾏命令,让环境变量生效

 source /etc/profile 1

修改bin/runserver.sh⽂件,由于RocketMQ默认设置的JVM内存为4G,但虚拟机⼀般没有这么4G内存,因此调整为512mb。

JAVA_OPT=“${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m”

在runserver.sh⽂件中找到上⾯这段内容,改为下⾯的参数。

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

3.启动NameServer

在上⼀章中介绍了RocketMQ的架构,启动RocketMQ服务需要先启动NameServer。 在bin⽬录内使⽤静默⽅式启动。

nohup ./mqnamesrv & 

查看bin/nohup.out显示如下内容表示启动成功

root@ubuntu:/usr/local/rocketmq/rocketmq-all-4.7.1-bin-release/bin#cat nohup.outJava HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future releaseJava HotSpot(TM) 64-Bit Server VM warning:UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.The Name Server boot success. serializeType=JSON

4.启动Broker

修改broker的JVM参数配置,将默认8G内存修改为512m。修改 bin/runbroker.sh⽂件

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

conf/broker.conf⽂件中加⼊如下配置,开启⾃动创建Topic功能

autoCreateTopicEnable=true

以静默⽅式启动broker

nohup ./mqbroker -n localhost:9876 &

查看 bin/nohup.out ⽇志,显示如下内容表示启动成功

The broker[ubuntu, 172.17.0.1:10911] boot success.serializeType=JSON

5.使用发送和接收消息验证MQ

配置nameserver的环境变量

在发送/接收消息之前,需要告诉客户端nameserver的位置。配置环境变量NAMESRV_ADDR

export NAMESRV_ADDR=localhost:9876

使⽤bin/tools.sh⼯具验证消息的发送,默认会发1000条消息

./tools.sh org.apache.rocketmq.example.quickstart.Producer

发送的消息⽇志:

...
SendResult [sendStatus=SEND_OK,msgId=FD154BA55A2B1008020C29FFFED6A0855CFC12A3A380885CB70A0235,offsetMsgId=AC11000100002A9F000000000001F491,messageQueue=MessageQueue [topic=TopicTest, brokerName=ubuntu,queueId=0], queueOffset=141] 

使⽤bin/tools.sh⼯具验证消息的接收

./tools.sh org.apache.rocketmq.example.quickstart.Consumer 

看到接收到的消息:

...
ConsumeMessageThread_12 Receive New Messages: [MessageExt[brokerName=ubuntu, queueId=1, storeSize=227, queueOffset=245,sysFlag=0, bornTimestamp=1658892578234,bornHost=/172.16.253.100:48524, storeTimestamp=1658892578235,storeHost=/172.17.0.1:10911,msgId=AC11000100002A9F0000000000036654, commitLogOffset=222804,bodyCRC=683694034, reconsumeTimes=0, preparedTransactionOffset=0,toString()=Message{topic='TopicTest', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=250, CONSUME_START_TIME=1658892813497,UNIQ_KEY=FD154BA55A2B1008020C29FFFED6A0855CFC12A3A380885CB9BA03D6,CLUSTER=DefaultCluster, WAIT=true, TAGS=TagA}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 57, 56, 50],transactionId='null'}]]

6.关闭服务器

关闭broker

./mqshutdown broker

关闭nameserver

./mqshutdown namesrv

二 搭建RocketMQ集群

1.RocketMQ集群模式

为了追求更好的性能,RocketMQ的最佳实践⽅式都是在集群模式下完成。RocketMQ官⽅提供了三种集群搭建⽅式。

  1. 2主2从异步通信⽅式

    使⽤异步⽅式进⾏主从之间的数据复制,吞吐量⼤,但可能会丢消息。使⽤conf/2m-2s-async⽂件夹内的配置⽂件做集群配置。

  2. 2主2从同步通信⽅式

    使⽤同步⽅式进⾏主从之间的数据复制,保证消息安全投递,不会丢失,但影响吞吐量

    使⽤ conf/2m-2s-sync⽂件夹内的配置⽂件做集群配置。

  3. 2主⽆从⽅式

    会存在单点故障,且读的性能没有前两种⽅式好。使⽤ conf/2m-noslave⽂件夹内的配置⽂件做集群配置。

上述三种官⽅提供的集群没办法实现⾼可⽤,即在master节点挂掉后,slave节点没办法⾃动被选举为新的master,⽽需要⼈⼯实现。

Dledger⾼可⽤集群:RocketMQ在4.5版本之后引⼊了第三⽅的Dleger⾼可⽤集群。

2.搭建主从异步集群

2.1 准备三台Linux服务器

三台Linux服务器中nameserver和broker之间的关系如下:

服务器服务器ipNameServerbroker节点部署
服务器1172.16.253.103172.16.253.103:9876
服务器2172.16.253.101172.16.253.101:9876broker-a(master), broker-b-s(slave)
服务器3172.16.253.102172.16.253.102:9876broker-b(master), broker-b-a(slave)

三台服务器都需要安装jdk和rocketmq,安装步骤参考上⼀章节。

2.2 启动三台nameserver

nameserver是⼀个轻量级的注册中⼼,broker把⾃⼰的信息注册到nameserver上。⽽且,nameserver是⽆状态的,直接启动即可。三台nameserver之间不需要通信,⽽是被请求⽅来关联三台nameserver的地址。

修改三台服务器的的runserver.sh⽂件,修改JVM内存默认的4g为512m。

在每台服务器的bin⽬录下执⾏如下命令:

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

服务器1:

nohup ./mqnamesrv -n 172.16.253.103:9876 & 

服务器2:

nohup ./mqnamesrv -n 172.16.253.101:9876 &

服务器3:

nohup ./mqnamesrv -n 172.16.253.102:9876 &

2.3 配置broker

broker-a,broker-b-s这两台broker是配置在服务器2上,broker-b,broker-a-s这两台broker是配置在服务器3上。这两对主从节点在不同的服务器上,服务器1上没有部署broker。

需要修改每台broker的配置⽂件。注意,同⼀台服务器上的两个broker保存路径不能⼀样。

broker-a的master节点

在服务器2上,进⼊到conf/2m-2s-async⽂件夹内,修改broker-a.properties⽂件。

# 所属集群名称
brokerClusterName=DefaultCluster
# broker名字
brokerName=broker-a
# broker所在服务器的ip
brokerIP1=172.16.253.101
# broker的id,0表示master,>0表示slave
brokerId=0
# 删除⽂件时间点,默认在凌晨4点
deleteWhen=04
# ⽂件保留时间为48⼩时
fileReservedTime=48
# broker的⻆⾊为master
brokerRole=ASYNC_MASTER
# 使⽤异步刷盘的⽅式
flushDiskType=ASYNC_FLUSH
# 名称服务器的地址列表
namesrvAddr=172.16.253.103:9876;172.16.253.101:9876;172.16.253.102:9876
# 在发送消息⾃动创建不存在的topic时,默认创建的队列数为4个
defaultTopicQueueNums=4
# 是否允许 Broker ⾃动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许 Broker ⾃动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# broker对外服务的监听端⼝
listenPort=10911
# abort⽂件存储路径
abortFile=/usr/local/rocketmq/store/abort
# 消息存储路径
storePathRootDir=/usr/local/rocketmq/store
# commitLog存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
# 消费队列存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
# 消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
# checkpoint⽂件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
# 限制的消息⼤⼩
maxMessageSize=65536
# commitLog每个⽂件的⼤⼩默认1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个⽂件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

broker-a的slave节点

在服务器3上,进⼊到conf/2m-2s-async⽂件夹内,修改broker-a-s.properties⽂件。

brokerClusterName=DefaultCluster
brokerName=broker-a
brokerIP1=172.16.253.102
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=172.16.253.103:9876;172.16.253.101:9876;172.16.253.102:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=11011
abortFile=/usr/local/rocketmq/store-slave/abort
storePathRootDir=/usr/local/rocketmq/store-slave
storePathCommitLog=/usr/local/rocketmq/store-slave/commitlog
storePathConsumeQueue=/usr/local/rocketmq/store-slave/consumequeue
storePathIndex=/usr/local/rocketmq/store-slave/index
storeCheckpoint=/usr/local/rocketmq/store-slave/checkpoint
maxMessageSize=65536

broker-b的master节点

在服务器3上,进⼊到conf/2m-2s-async⽂件夹内,修改broker-b.properties⽂件。

brokerClusterName=DefaultCluster
brokerName=broker-b
brokerIP1=172.16.253.102
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=172.16.253.103:9876;172.16.253.101:9876;172.16.253.102
:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911
abortFile=/usr/local/rocketmq/store/abort
storePathRootDir=/usr/local/rocketmq/store
storePathCommitLog=/usr/local/rocketmq/store/commitlog
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
storePathIndex=/usr/local/rocketmq/store/index
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
maxMessageSize=65536

broker-b的slave节点

在服务器2上,进⼊到conf/2m-2s-async⽂件夹内,修改broker-b-s.properties⽂件。

brokerClusterName=DefaultCluster
brokerName=broker-b
brokerIP1=172.16.253.101
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=172.16.253.103:9876;172.16.253.101:9876;172.16.253.102:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=11011
abortFile=/usr/local/rocketmq/store-slave/abort
storePathRootDir=/usr/local/rocketmq/store-slave
storePathCommitLog=/usr/local/rocketmq/store-slave/commitlog
storePathConsumeQueue=/usr/local/rocketmq/store-slave/consumequeue
storePathIndex=/usr/local/rocketmq/store-slave/index
storeCheckpoint=/usr/local/rocketmq/store-slave/checkpoint
maxMessageSize=65536

修改服务器2和服务器3的runbroker.sh⽂件

修改JVM内存默认的8g为512m。

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

2.4 启动broker

在服务器2中启动broker-a(master)和broker-b-s(slave)

nohup ./mqbroker -c ../conf/2m-2s-async/broker-a.properties &
nohup ./mqbroker -c ../conf/2m-2s-async/broker-b-s.properties &

在服务器3中启动broker-b(master),broker-a-s(slave)

nohup ./mqbroker -c ../conf/2m-2s-async/broker-b.properties &
nohup ./mqbroker -c ../conf/2m-2s-async/broker-a-s.properties &

3.验证集群

使⽤RocketMQ提供的tools⼯具验证集群是否正常⼯作。

在服务器2上配置环境变量⽤于被tools中的⽣产者和消费者程序读取该变量。

export NAMESRV_ADDR='172.16.253.103:9876;172.16.253.101:9876;172.16.253.102:9876'

启动⽣产者

./tools.sh org.apache.rocketmq.example.quickstart.Producer 

启动消费者

./tools.sh org.apache.rocketmq.example.quickstart.Consumer

4.mqadmin管理⼯具

RocketMQ提供了命令⼯具⽤于管理topic、broker、集群、消息等。⽐如可以使⽤mqadmin创建topic:

./mqadmin updateTopic -n 172.16.253.101:9876 -c DefaultCluster -t myTopic1

下⾯提供了mqadmin⼯具的各种命令。

1. 创建topic:updateTopic

参数是否必填说明
-b如果-c为空,则必填broker地址,表示topic建在该broker
-c如果-b为空,则必填cluster名称,表示topic建在该集群(集群可通过clusterList查询)
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…
-p指定新topic的权限控制(W|R|WR)
-r可读队列数,默认为8
-w可写队列数,默认为8
-ttopic名称,注意名称格式:字下美人数骆驼

2. 删除Topic:deleteTopic

参数是否必填说明
-ccluster名称,表示删除某集群下的某个topic(集群可通过clusterList查询)
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…
-ttopic名称,注意名称格式:字下美人数骆驼

3. 创建(修订)订阅组:updateSubGroup

参数是否必填说明
-b如果-c为空,则必填broker地址,表示订阅组建在该broker
-c如果-b为空,则必填cluster名称,表示topic建在该集群(集群可通过clusterList查询)
-d是否容许广播方式消费
-g订阅组名
-i从哪个broker开始消费
-m是否容许从队列的最小位置开始消费,默认会设置为false
-q消费失败的消息放到一个重试队列,每个订阅组配置几个重试队列
-r重试消费最大次数,超过则投递到死信队列,不再投递并报警
-s消费功能是否开启
-w发现消息堆积后,将Consumer的消费请求重定向到另一台slave机器
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

4. 删除订阅组配置:deleteSubGroup

参数是否必填说明
-b如果-c为空,则必填broker地址,表示订阅组建在该broker
-c如果-b为空,则必填cluster地址,表示topic建在该集群(集群可通过clusterList查询)
-g订阅组名
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

5. 更新Broker 配置⽂件:updateBrokerConfig

参数是否必填说明
-b如果-c为空,则必填broker地址,表示订阅组建在该broker
-c如果-b为空,则必填cluster地址,表示topic建在该集群(集群可通过clusterList查询)
-kkey值
-vvalue值
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

6. 查看Topic 列表信息:topicList

参数是否必填说明
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

7. 查看Topic 路由信息:topicRoute

参数是否必填说明
-ttopic名称
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

8. 查看Topic 统计信息:topicStats

参数是否必填说明
-ttopic名称
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

9. 查看Broker 统计信息:brokerStats

参数是否必填说明
-bbroker地址
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

10. 根据消息ID 查询消息:queryMsgById

参数是否必填说明
-i消息id
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

10 根据消息Key 查询消息:queryMsgByKey

参数是否必填说明
-f被查询消息的截止时间
-kmsgKey
-ttopic名称
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

11 根据Offset 查询消息:queryMsgByOffset

参数是否必填说明
-bbroker名称,表示订阅组建在该broker(这里需要注意填写的是boker的名称,而不是broker地址,broker名称可以再clusterList查询)
-iquery队列id
-ooffset值
-ttopic名称
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

12 查询Producer 的⽹络连接:producerConnection

参数是否必填说明
-g生产者所属组名
-ttopic名称
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

13 查询Consumer 的⽹络连接:consumerConnection

参数是否必填说明
-g生产者所属组名
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

14 查看订阅组消费状态:consumerProgress

参数是否必填说明
-g生产者所属组名
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

15 查看集群消息:clusterList

参数是否必填说明
-m打印更多信息
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

16 添加(更新)KV 配置信息:updateKvConfig

参数是否必填说明
-kkey值
-vvalue值
-snamespace值
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

17 删除KV 配置信息:deleteKvConfig

参数是否必填说明
-kkey值
-snamespace值
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

18 添加(更新)Project group 配置信息:updateProjectGroup

参数是否必填说明
-pproject group名
-i服务器ip
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

19 删除Project group 配置信息:deleteProjectGroup

参数是否必填说明
-pproject group名
-i服务器ip
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

20 取得Project group 配置信息:getProjectGroup

参数是否必填说明
-pproject group名
-i服务器ip
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

21 设置消费进度:resetOffsetByTime

根据时间来设置消费进度,设置之前要关闭这个订阅组的所有consumer,设置完再启动,⽅可⽣效

参数是否必填说明
-f通过时间戳强制回滚(true|false),默认为true
-s时间戳
-g消费者所属组名
-ttopic名称
-h打印帮助
-nnameserver服务地址列表,格式ip:port;ip:port;…

22 清除特定Broker权限:wipeWritePerm

参数是否必填说明
-bbroker地址
-h打印帮助
-nnameserve服务地址列表,格式ip:port;ip:port

23 获取Consumer消费进度:getConsumerStatus

该命令只打印当前与cluster 连接的consumer 的消费进度

参数是否必填说明
-g消费者所属组名
-t查询主题
-iConsumer客户端-p
-h打印帮助
-nnameserve服务地址列表,格式为ip:port;ip:port

5.安装可视化管理控制平台

RocketMQ没有提供可视化管理控制平台,可以使⽤第三⽅管理控制平台:https://github.com/apache/rocketmq-externals/tree/rocketmq-console-1.0.0/rocketmq-console

下载管理控制平台,解压缩在linux服务器上,可以安装在服务器1上,给服务器安装maven环境

apt install maven

修改 rocketmq-externals/rocketmq-externals-master/rocketmq-console/src/main/resources/application.properties 配置⽂件中的nameserver地址

rocketmq.config.namesrvAddr=172.16.253.103:9876;172.16.253.101:9876;172.16.253.102:9876

回到rocketmq-externals/rocketmq-externals-master/rocketmq-console路径下执⾏maven命令进⾏打包

mvn clean package -Dmaven.test.skip=true 

运⾏jar包。进⼊到rocketmq-externals/rocketmq-externals-master/rocketmq-console/target⽬录内执⾏如下命令:

nohup java -jar rocketmq-console-ng-1.0.1.jar 

访问所在服务器的8080端⼝,查看集群界⾯,可以看到之前部署的集群

相关文章:

RocketMQ部署

一 安装mq 1.下载RocketMQ 本教程使⽤的是RocketMQ4.7.1版本,建议使⽤该版本进⾏之后的demo训练。 运⾏版:https://www.apache.org/dyn/closer.cgi?pathrocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip 源码:https://www.apache.org…...

43岁程序员,投了上万份简历都已读不回,只好把年龄改成40岁,这才有了面试机会,拿到了offer!...

40多岁找工作有多难? 一位43岁的程序员讲述了自己找工作的经历: 80年,大专,目前没到43周岁,年前被裁,简历上的年龄是42岁,两个多月投了上万份简历,99.5%是已读未回。后来改变策略把简…...

MySQL分区表相关知识总结

1.创建分区表: create table t(col11 int null, col22 …) engineinnodb partition by hash(col33) partitions 44; create table t(col11 int null, col22 …) engineinnodb partition by range(id) (partition p0 values less than (10), partition p1 values les…...

outlook邮箱pc/mac客户端下载 含最新版

新的 Outlook for Windows or mac 为 Outlook 应用带来了最新功能、智能辅助功能和新的新式简化设计。 你可以根据自己的风格定制它,并使用新的 Outlook for Windows/mac 执行更多操作! 览版,与我们一起开始旅程,并帮助我们塑造新…...

缓存雪崩、缓存穿透、缓存击穿分别是什么?如何解决?

缓存中存放的大多都是热点数据,目的就是从缓存中获取数据,而不用直接访问数据库,从而提高查询效率 缓存雪崩 概念 指缓存在同一时间大面积失效,后面的请求直接访问数据库,导致数据库短时间内压力过大而崩溃&#xff…...

VBA实战篇学习笔记02 Err错误处理

文章目录 专题VI 错误处理课时38 常见错误类型错误代码13 :类型不匹配错误代码91: 对象变量或者with变量未设置错误代码1004: 视具体错误类型而变化 课时39 Err错误处理On Error Resume Next :Resume语句:Resume Next语句:未知错误:Exit SubOn Error Goto 0 专题VI 错误处理 课…...

【Git】拉取代码/提交代码

1.从将本地代码放入远程仓库 (如果有分支的情况) [git checkout xx切换分支后 git add . 将本地所有改动文件新增 commit之后 git push(将代码全部提交)] 分支操作 #查看分支 git branch #创建分支 git branch test #切换分支 git checkout test #修改代码 #提交代码git ad…...

产品预览 | 系统仿真与三维专业场仿真融合——MWORKS模型降阶工具箱

1 引言 近二十年来,数字化技术迅猛发展,以美国和中国提出装备数字工程为标志,人类迈入全新的数字化时代。装备数字化需要对装备的运行状态和行为进行准确的模拟和预测,这就需要利用系统仿真技术。系统仿真技术能够综合考虑装备的…...

我们都遇到过的这些ajax代码到底什么意思?

hello,我是小索奇,本篇文章给大家带来ajax中常用的一些代码,为什么写这些呢? 因为小索奇也看黑马、尚硅谷等老师的视频,在学习java的时候经常会介绍ajax,导致很多不了解的伙伴一脸懵然,以防万一…...

TiDB实战篇-TiCDC

目录 简介 原理 使用场景 使用限制 硬件配置 部署 在安装TiDB的时候部署 扩容部署 操作 管理CDC 管理工具 查看状态 创建同步任务 公共参数 CDC任务同步到MySQL实战 同步命令 查看所有的同步任务 同步任务的状态 管理同步任务 查看一个同步信息的具体情况 …...

ElasticSearch第十七讲 ES索引别名的使用

索引别名 ES中可以为索引添加别名,一个别名可以指向到多个索引中,同时在添加别名时可以设置筛选条件,指向一个索引的部分数据,实现在关系数据库汇总的视图功能,这就是ES中别名的强大之处。别名是一个非常实用的功能,为我们使用索引提供了极大的灵活性,许多ES的API都支持…...

第二个机器学习应用:乳腺癌数据集在决策树模型上的挖掘

目录 决策树优化与可视化 1 决策树分类 2 决策树可视化 3 显示树的特征重要性 特征重要性可视化 决策树回归 1 决策树回归 决策树优化与可视化 1 决策树分类 from sklearn.datasets import load_breast_cancer from sklearn.tree import DecisionTreeClassifier from sk…...

前端canvas截图酷游地址的方法!

前情提要 想在在JavaScript中&#xff0c;酷游专员KW9㍠ㄇEㄒ提供用HTML5的Canvas元素来剪取画面并存成SVG或PNG。 程式写法(一) 首先&#xff0c;需要在HTML中创建一个Canvas元素<canvas id"myCanvas"></canvas> 在JavaScript中&#xff0c;使用canv…...

2018年入学,2021年入职

2018年的春天&#xff0c;凌晨紧张地查着考研成绩&#xff0c;运气好&#xff0c;384&#xff0c;远远超出了我的预期“能进复试就行”&#xff0c;秉承着“尽人事&#xff0c;知天命”的格言&#xff0c;坚持复习完&#xff0c;坚持到考试最后一秒。 在考试之前&#xff0c;我…...

python+nodejs+ssm+vue 基于协同过滤的旅游推荐系统

本文首先介绍了旅游推荐的发展背景与发展现状&#xff0c;然后遵循软件常规开发流程&#xff0c;首先针对系统选取适用的语言和开发平台&#xff0c;根据需求分析制定模块并设计数据库结构&#xff0c;再根据系统总体功能模块的设计绘制系统的功能模块图&#xff0c;流程图以及…...

【STL十四】函数对象(function object)_仿函数(functor)——lambda表达式

【STL十四】函数对象&#xff08;function object&#xff09;_仿函数&#xff08;functor&#xff09;——lambda表达式 一、函数对象&#xff08;function object&#xff09;二、函数对象优点三、分类四、头文件五、用户定义函数对象demo六、std::内建函数对象1、 算术运算函…...

如何写出高质量的前端代码

写出高质量的前端代码是每个前端开发人员的追求。在一个复杂的项目中&#xff0c;代码质量对于项目的可维护性、可扩展性和可读性都有很大的影响。本文将介绍一些如何写出高质量前端代码的技巧和最佳实践。 一、注重代码结构和组织 1.1 遵循一致的命名规范 命名规范是编写高…...

YOLOv7如何提高目标检测的速度和精度,基于优化算法提高目标检测速度

目录 一、学习率调度二、权重衰减和正则化三、梯度累积和分布式训练1、梯度累积2、分布式训练 四、自适应梯度裁剪 大家好&#xff0c;我是哪吒。 上一篇介绍了YOLOv7如何提高目标检测的速度和精度&#xff0c;基于模型结构提高目标检测速度&#xff0c;本篇介绍一下基于优化算…...

CentOS 7中安装配置Nginx的教程指南

1. 安装Nginx 在终端中执行以下命令以安装Nginx&#xff1a; sudo yum install epel-release sudo yum install nginx安装完成后的 Nginx 内容通常会被安装在以下目录下&#xff1a; /etc/nginx: 该目录包含 Nginx 的配置文件&#xff0c;包括 nginx.conf 和 conf.d 目录下的…...

Vicuna- 一个类 ChatGPT开源 模型

Meta 开源 LLaMA(大羊驼)系列模型为起点,研究人员逐渐研发出基于LLaMA的Alpaca(羊驼)、Alpaca-Lora、Luotuo(骆驼)等轻量级类 ChatGPT 模型并开源。 google提出了一个新的模型:Vicuna(小羊驼)。该模型基于LLaMA,参数量13B。Vicuna-13B 通过微调 LLaMA 实现了高性能…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...