RocketMq02_复制刷盘、Broker常用模式、磁盘阵列、集群搭建

news2024/9/23 15:32:07

文章目录

  • ①. 单机版本安装与启动
  • ②. 控制台的安装与启动
  • ③. 复制刷盘、Broker集群模式
  • ④. 磁盘阵列 - RAID
  • ⑤.JBOD、RAID0
  • ⑥. RAID1、RAID10、01
  • ⑦. 搭建集群 - 异步两主两从

①. 单机版本安装与启动

  • ①. 系统要求是64位的,JDK要求是1.8及其以上版本的
    在这里插入图片描述
  • ②. 将下载的安装包上传到Linux、将其解压到 /opt/apps目录下面

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

[root@rocketmq tools]# unzip rocketmq-all-4.8.0-bin-release.zip  -d /opt/apps
  • ③. 修改初始内存,修改runserver.sh
    使用vim命令打开bin/runserver.sh文件。现将这些值修改为如下:
    在这里插入图片描述
  • ④. 修改runbroker.sh
    使用vim命令打开bin/runbroker.sh文件。现将这些值修改为如下:
    在这里插入图片描述
  • ⑤. 启动NameServer
nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log

在这里插入图片描述

  • ⑥. 启动broker
nohup sh bin/mqbroker -n localhost:9876 &
tail -f ~/logs/rocketmqlogs/broker.log

在这里插入图片描述

  • ⑦. 发送/接收消息测试
# 发送消息
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
# 接收消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
  • ⑧. 无论是关闭name server还是broker,都是使用bin/mqshutdown命令
[root@rocketmq rocketmq]# sh bin/mqshutdown broker
The mqbroker(1740) is running...
Send shutdown request to mqbroker(1740) OK
[root@rocketmq rocketmq]# sh bin/mqshutdown namesrv
The mqnamesrv(1692) is running...
Send shutdown request to mqnamesrv(1692) OK
[2]+ 退出 143 nohup sh bin/mqbroker -n localhost:9876

②. 控制台的安装与启动

  • ①. RocketMQ有一个可视化的dashboard,通过该控制台可以直观的查看到很多数据
    在这里插入图片描述
  • ②. 修改其src/main/resources中的application.properties配置文件。
  1. 原来的端口号为8080,修改为一个不常用的
  2. 指定RocketMQ的name server地址
server.contextPath=
server.port=7000
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
rocketmq.config.namesrvAddr=192.168.68.152:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
  • ③. 添加依赖:在解压目录rocketmq-console的pom.xml中添加如下JAXB依赖。
	<dependency>
		<groupId>javax.xml.bind</groupId>
		<artifactId>jaxb-api</artifactId>
		<version>2.3.0</version>
	</dependency>
	<dependency>
		<groupId>com.sun.xml.bind</groupId>
		<artifactId>jaxb-impl</artifactId>
		<version>2.3.0</version>
	</dependency>
	<dependency>
		<groupId>com.sun.xml.bind</groupId>
		<artifactId>jaxb-core</artifactId>
		<version>2.3.0</version>
	</dependency>
	<dependency>
		<groupId>javax.activation</groupId>
		<artifactId>activation</artifactId>
		<version>1.1.1</version>
	</dependency>
  • ④. 在rocketmq-console目录下运行maven的打包命令
    mvn clean package -Dmaven.test.skip=true

  • ⑤. 启动:java -jar
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

③. 复制刷盘、Broker集群模式

  • ①. 复制策略是Broker的Master与Slave间的数据同步方式。分为同步复制与异步复制
  1. 同步复制:消息写入master后,master会等待slave同步数据成功后才向producer返回成功ACK
  2. 异步复制:消息写入master后,master立即向producer返回成功ACK,无需等待slave同步数据成功
    在这里插入图片描述
  • ②. 刷盘策略指的是broker中消息的落盘方式,即消息发送到broker内存后消息持久化到磁盘的方式。分为同步刷盘与异步刷盘
  1. 同步刷盘:当消息持久化到broker的磁盘后才算是消息写入成功
  2. 异步刷盘:当消息写入到broker的内存后即表示消息写入成功,无需等待消息持久化到磁盘
    消息写入到Broker的内存,一般是写入到了PageCache
  3. 对于异步刷盘策略,消息会写入到PageCache后立即返回成功ACK。但并不会立即做落盘操作,而是当PageCache到达一定量时会自动进行落盘
  • ③. Broker集群模式 - 单Master:只有一个broker(其本质上就不能称为集群)。这种方式也只能是在测试时使用,生产环境下不能使用,因为存在单点问题

  • ④. 多Master:broker集群仅由多个master构成,不存在Slave。同一Topic的各个Queue会平均分布在各个master节点上

  1. 优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高
  2. 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅(不可消费),
    消息实时性会受到影响
  3. 以上优点的前提是,这些Master都配置了RAID磁盘阵列。如果没有配置,一旦出现某Master宕
    机,则会发生大量消息丢失的情况
  • ⑤. 多Master多Slave模式 - 异步复制
    broker集群由多个master构成,每个master又配置了多个slave(在配置了RAID磁盘阵列的情况下,一个master一般配置一个slave即可)。master与slave的关系是主备关系,即master负责处理消息的读写请求,而slave仅负责消息的备份与master宕机后的角色切换
  1. 异步复制即前面所讲的复制策略中的异步复制策略,即消息写入master成功后,master立即向producer返回成功ACK,无需等待slave同步数据成功
  2. 该模式的最大特点之一是,当master宕机后slave能够自动切换为master。不过由于slave从master的同步具有短暂的延迟(毫秒级),所以当master宕机后,这种异步复制方式可能会存在少量消息的丢失问题
  3. Slave从Master同步的延迟越短,其可能丢失的消息就越少
  4. 对于Master的RAID磁盘阵列,若使用的也是异步复制策略,同样也存在延迟问题,同样也可能
    会丢失消息。但RAID阵列的秘诀是微秒级的(因为是由硬盘支持的),所以其丢失的数据量会更少
  • ⑥. 多Master多Slave模式-同步双写
  1. 该模式是多Master多Slave模式的同步复制实现。所谓同步双写,指的是消息写入master成功后,
    master会等待slave同步数据成功后才向producer返回成功ACK,即master与slave都要写入成功后才会返回成功ACK,也即双写
  2. 该模式与异步复制模式相比,优点是消息的安全性更高,不存在消息丢失的情况。但单个消息的RT略高,从而导致性能要略低(大约低10%)
  3. 该模式存在一个大的问题:对于目前的版本,Master宕机后,Slave不会自动切换到Master

④. 磁盘阵列 - RAID

  • ①. RAID历史
    1988年美国加州大学伯克利分校的D. A. Patterson教授等首次在论文’A Case of Redundant Array of Inexpensive Disks"中提出了RAID概念 ,即廉价冗余磁盘阵列(Redundant Array of Inexpensive Disks)。由于当时大容量磁盘比较昂贵, RAID 的基本思想是将多个容量较小、相对廉价的磁盘进行有机组合,从而以较低的成本获得与昂贵大容量磁盘相当的容量、性能、可靠性。随着磁盘成本和价格的不断降低,“廉价"已经毫无意义。因此, RAID咨询委员会(RAID Advisory Board, RAB )决定用"独立” 替代"廉价" ,于是RAID变成了独立磁盘冗余阵列(Redundant Array of Independent Disks)。但这仅仅是名称的变化,实质内容没有改变

  • ②. RAID等级

  1. RAID这种设计思想很快被业界接纳, RAID技术作为高性能、高可靠的存储技术得到了非常广泛的应用。RAID主要利用镜像、数据条带和数据校验三种技术来获取高性能、可靠性、容错能力和扩展性,根据对这三种技术的使用策略和组合架构,可以把RAID分为不同的等级,以满足不同数据应用的需求
  2. D. A. Patterson等的论文中定义了RAID0 ~ RAID6原始RAID等级。随后存储厂商又不断推出 RAID7、 RAID10、RAID01 、 RAID50 、 RAID53 、 RAID100等RAID等级,但这些并无统一的标准。目前业界与学术界公认的标准是 RAID0 ~ RAID6,而在实际应用领域中使用最多的RAID等级是 RAID0、RAID1、RAID3、RAID5 、RAID6和RAID10
  3. RAID每一个等级代表一种实现方法和技术,等级之间并无高低之分。在实际应用中,应当根据用户的数据应用特点,综合考虑可用性、性能和成本来选择合适的RAID等级,以及具体的实现方式
  • ③. 镜像技术是一种冗余技术,为磁盘提供数据备份功能,防止磁盘发生故障而造成数据丢失。对于RAID而言,采用镜像技术最典型地的用法就是,同时在磁盘阵列中产生两个完全相同的数据副本,并且分布在两个不同的磁盘上。镜像提供了完全的数据冗余能力,当一个数据副本失效不可用时,外部系统仍可正常访问另一副本,不会对应用系统运行和性能产生影响。而且,镜像不需要额外的计算和校验,故障修复非常快,直接复制即可。镜像技术可以从多个副本进行并发读取数据,提供更高的读I/O性能,但不能并行写数据,写多个副本通常会导致一定的I/O性能下降(如果都要写,需要做同步、Io性能下降)
    镜像技术提供了非常高的数据安全性,其代价也是非常昂贵的,需要至少双倍的存储空间。高成本限制了镜像的广泛应用,主要应用于至关重要的数据保护,这种场合下的数据丢失可能会造成非常巨大的损失

  • ④. 数据条带化技术是一种自动将 I/O操作负载均衡到多个物理磁盘上的技术。更具体地说就是,将一块连续的数据分成很多小部分并把它们分别存储到不同磁盘上。这就能使多个进程可以并发访问数据的多个不同部分,从而获得最大程度上的 I/O 并行能力,极大地提升性能

  • ⑤. 数据校验技术是指, RAID 要在写入数据的同时进行校验计算,并将得到的校验数据存储在 RAID 成员磁盘中。校验数据可以集中保存在某个磁盘或分散存储在多个不同磁盘中。当其中一部分数据出错时,就可以对剩余数据和校验数据进行反校验计算重建丢失的数据

  • ⑥. 从实现角度看, RAID主要分为软RAID、硬RAID以及混合RAID三种

  1. 软RAID:所有功能均有操作系统和CPU来完成,没有独立的RAID控制处理芯片和I/O处理芯片,效率自然最低
  2. 硬RAID:配备了专门的RAID控制处理芯片和I/O处理芯片以及阵列缓冲,不占用CPU资源。效率很高,但成本也很高
  3. 混合RAID:具备RAID控制处理芯片,但没有专门的I/O处理芯片,需要CPU和驱动程序来完成。性能和成本在软RAID和硬RAID之间

⑤.JBOD、RAID0

  • ①.JBOD,JustaBunchofDisks,磁盘簇。表示一个没有控制软件提供协调控制的磁盘集合,这是RAID区别与JBOD的主要因素。JBOD将多个物理磁盘串联起来,提供一个巨大的逻辑磁盘
  1. JBOD的数据存放机制是由第一块磁盘开始按顺序往后存储,当前磁盘存储空间用完后,再依次往后面的磁盘存储数据。JBOD存储性能完全等同于单块磁盘,而且也不提供数据安全保护
  2. JBOD常指磁盘柜,而不论其是否提供RAID功能。不过,JBOD并非官方术语,官方称为Spanning

在这里插入图片描述

  • ②.RAID0是一种简单的、无数据校验的数据条带化技术。实际上不是一种真正的RAID,因为它并不提供任何形式的冗余策略。RAID0将所在磁盘条带化后组成大容量的存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问
  1. 理论上讲,一个由n块磁盘组成的RAID0,它的读写性能是单个磁盘性能的n倍,但由于总线带宽等多种因素的限制,实际的性能提升低于理论值。由于可以并发执行I/O操作,总线带宽得到充分利用。再加上不需要进行数据校验,RAID0的性能在所有RAID等级中是最高的
  2. RAID0具有低成本、高读写性能、100%的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复
  3. 应用场景:对数据的顺序读写要求不高,对数据的安全性和可靠性要求不高,但对系统性能要求很高的场景
  4. RAID0与JBOD相同点:存储容量:都是成员磁盘容量总和、磁盘利用率,都是100%,即都没有做任何的数据冗余备份
  5. RAID0与JBOD不同点:
    JBOD:数据是顺序存放的,一个磁盘存满后才会开始存放到下一个磁盘
    RAID0:各个磁盘中的数据写入是并行的,是通过数据条带技术写入的。其读写性能是JBOD的n倍
    在这里插入图片描述

⑥. RAID1、RAID10、01

  • ①. RAID1就是一种镜像技术,它将数据完全一致地分别写到工作磁盘和镜像磁盘,它的磁盘空间利用率为50% 。 RAID1在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。RAID1提供了最佳的数据保护,一旦工作磁盘发生故障,系统将自动切换到镜像磁盘,不会影响使用
  1. RAID1是为了增强数据安全性使两块磁盘数据呈现完全镜像,从而达到安全性好、技术简单、管理方便。 RAID1拥有完全容错的能力,但实现成本高
  2. 应用场景:对顺序读写性能要求较高,或对数据安全性要求较高的场景
    在这里插入图片描述
  • ②. RAID10是一个RAID1与RAID0的组合体,所以它继承了RAID0的快速和RAID1的安全
    简单来说就是,先做条带,再做镜像。 发即将进来的数据先分散到不同的磁盘,再将磁盘中的数据做镜像
    在这里插入图片描述

  • ③. RAID01是一个RAID0与RAID1的组合体,所以它继承了RAID0的快速和RAID1的安全
    简单来说就是,先做镜像再做条带。 即将进来的数据先做镜像,再将镜像数据写入到与之前数据不同的磁盘,即再做条带(RAID10要比RAID01的容错率再高,所以生产环境下一般是不使用RAID01的) - RAID01如果一个坏了,对应的一组都是不能使用的
    在这里插入图片描述

⑦. 搭建集群 - 异步两主两从

  • ①. VMware克隆
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
# 修改hostname
vi /etc/hostname
# 修改虚拟机ip地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改完之后,记得重启network
systemctl restart network
  • ②. conf文件下,RocketMQ官方为我们提供了三种集群配置形式
[root@rocketmqOs2 conf]# pwd 
/opt/apps/rocketmq-all-4.8.0-bin-release/conf
[root@rocketmqOs2 conf]# ll
总用量 52
drwxr-xr-x. 2 root root  4096 1023 2020 2m-2s-async
drwxr-xr-x. 2 root root  4096 1023 2020 2m-2s-sync
drwxr-xr-x. 2 root root  4096 124 2020 2m-noslave
-rw-r--r--. 1 root root   949 1023 2020 broker.conf
drwxr-xr-x. 2 root root  4096 124 2020 dledger
-rw-r--r--. 1 root root 14978 1023 2020 logback_broker.xml
-rw-r--r--. 1 root root  3836 124 2020 logback_namesrv.xml
-rw-r--r--. 1 root root  3761 1023 2020 logback_tools.xml
-rw-r--r--. 1 root root  1305 124 2020 plain_acl.yml
-rw-r--r--. 1 root root   834 124 2020 tools.yml
[root@rocketmqOs2 conf]# 

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

  • ③. rocketmqOS1 - 修改borker-a.application
    (rocketmqOS2 - 修改borker-b.application)
# 指定整个broker集群的名称,或者说是RocketMQ集群的名称
brokerClusterName=DefaultCluster
# 指定master-slave集群的名称。一个RocketMQ集群可以包含多个master-slave集群
brokerName=broker-a
# master的brokerId为0
brokerId=0
# 指定删除消息存储过期文件的时间为凌晨4点
deleteWhen=04
# 指定未发生更新的消息存储文件的保留时长为48小时,48小时后过期,将会被删除
fileReservedTime=48
# 指定当前broker为异步复制master
brokerRole=ASYNC_MASTER
# 指定刷盘策略为异步刷盘
flushDiskType=ASYNC_FLUSH
# 指定Name Server的地址
namesrvAddr=192.168.68.152:9876;192.168.68.153:9876
  • ④. rocketmqOS1 - 修改broker-b-s.properties
    (rocketmqOS2 - 修改broker-a-s.properties)
# 指定这是另外一个master-slave集群
brokerClusterName=DefaultCluster
brokerName=broker-b
# slave的brokerId为非0
brokerId=1
deleteWhen=04
fileReservedTime=48
# 指定当前broker为slave
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=192.168.68.152:9876;192.168.68.153:9876
# 指定Broker对外提供服务的端口,即Broker与producer与consumer通信的端口。默认
# 10911。由于当前主机同时充当着master1与slave2,而前面的master1使用的是默认端口。这
# 里需要将这两个端口加以区分,以区分出master1与slave2
listenPort=11911
# 指定消息存储相关的路径。默认路径为~/store目录。由于当前主机同时充当着master1与
# slave2,master1使用的是默认路径,这里就需要再指定一个不同路径
storePathRootDir=~/store-s
storePathCommitLog=~/store-s/commitlog
storePathConsumeQueue=~/store-s/consumequeue
storePathIndex=~/store-s/index
storeCheckpoint=~/store-s/checkpoint
abortFile=~/store-s/abort
  • ⑤. 启动服务器:启动NameServer集群
    分别启动rocketmqOS1与rocketmqOS2两个主机中的NameServer。启动命令完全相同。
# 在这个目录下执行
[root@rocketmqOs2 rocketmq-all-4.8.0-bin-release]# 
nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log
  • ⑥. 启动两个Master
    分别启动rocketmqOS1与rocketmqOS2两个主机中的broker master。注意,它们指定所要加载的配置文件是不同的
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &
tail -f ~/logs/rocketmqlogs/broker.log
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties &
tail -f ~/logs/rocketmqlogs/broker.log
  • ⑦. 启动两个Slave
    分别启动rocketmqOS1与rocketmqOS2两个主机中的broker slave。注意,它们指定所要加载的配置文件是不同的
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties &
tail -f ~/logs/rocketmqlogs/broker.log
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &
tail -f ~/logs/rocketmqlogs/broker.log
  • ⑧. 修改控制台,可以通过浏览器的方式查看
server.contextPath=
server.port=7000
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr  NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
rocketmq.config.namesrvAddr=192.168.68.152:9876;192.168.68.153:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console's data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don't want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true

在这里插入图片描述

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

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

相关文章

NFT及智能合约开发

文章目录1.Web3.01.1 GameFi1.2 DeFi1.3 dApp2.NFT2.1 NFT Applications2.2 NFT Earning2.3 NFT结构2.3 IPFS2.4 Wallet3.Smart Contract3.1 Smart Contract System3.2 Smart Contract Development3.2.1 Language3.2.2 IDE3.2.3 BlockChain3.2.4 FrontEnd3.2.5 NFT Test WebSit…

《Mysql是怎样运行的》

客户端查询mysql版本&#xff1a;select version(); 1 第1章 装作自己是个小白-重新认识MySQL 1.1 MySQL的客户端&#xff0f;服务器架构每个进程都有一个唯一的编号&#xff0c;称为 进程ID &#xff0c;英文名叫 PID &#xff0c;这个编号是在我们启动程序的时候由操作系统随…

IDEA运行SpringBoot项目常见问题【统一答疑】

【辰兮要努力】&#xff1a;hello你好我是辰兮&#xff0c;很高兴你能来阅读&#xff0c;昵称是希望自己能不断精进&#xff0c;向着优秀程序员前行&#xff01; 博客来源于项目以及编程中遇到的问题总结&#xff0c;偶尔会有读书分享&#xff0c;我会陆续更新Java前端、后台、…

PRISEMI芯导科技推出PDG7115直驱型E-Mode氮化镓功率IC

PRISEMI芯导科技推出PDG7115直驱型E-Mode氮化镓功率IC 氮化镓以开关速度快&#xff0c;导阻低&#xff0c;低输入输出电荷的优势&#xff0c;应用在快充上逐渐取代了传统的高压硅MOS管。使用氮化镓取代硅MOS管&#xff0c;不仅降低了开关损耗&#xff0c;提高充电器的转换效率…

SpringBoot RabbitMq 六大模式

目录 依赖、配置 简单队列 模型 代码示例 工作队列 模型 代码示例 订阅模式 模型 代码示例 路由模式 模型 代码示例 主题模式 模型 代码示例 RPC 依赖、配置 依赖&#xff1a; <dependency> <groupId>org.springframework.boot</groupId&g…

三分查找算法

目录 一 算法简介 详细介绍 两种基本方法 二 算法实践 1&#xff09;实数三分 拓展&#xff1a;秦九韶算法计算多项式 方法1&#xff1a;直接模拟累加 方法二&#xff1a;根据秦九韶算法 1&#xff09;模板三分法 题目描述 解法 2&#xff09;三分求极值 题目描述 …

3D激光里程计其四:点云线面特征提取

3D激光里程计其四&#xff1a;点云线面特征提取1. 点云线面特征提取1.1 按线数分割1.2 计算曲率1.3 按曲率大小筛选特征点2. 基于线面特征的位姿变化2.1 帧间关联2.1.1 点云位姿转换2.1.2 线特征关联2.1.3 面特征关联2.2 残差函数2.2.1 线特征2.2.2 面特征2.3 位姿优化2.3.1 线…

数据结构——二叉树2.0

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;数据结构——二叉树 &#x1f525;<3>创作者&#xff1a;我的代码爱吃辣 ☂️<4>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<5>前言&#xff1a;上期讲了…

尚医通-医院接口设置(七)

&#xff08;1&#xff09;后台系统-医院设置接口-需求和准备 &#xff08;2&#xff09;后台系统-医院设置接口-创建基础类 &#xff08;3&#xff09;医院设置接口-查询和逻辑删除 &#xff08;4&#xff09;医院的设置接口-统一返回结果定义 &#xff08;5&#xff09;医…

[附源码]Python计算机毕业设计Django校园代取快递系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

知到/智慧树——大学生心理健康(华东政法大学)参考答案

目录 注&#xff1a;有些图片上传异常&#xff0c;请以参考答案为准&#xff0c;不要以蓝色选项为全部答案。 第一章测试 第二章测试 第三章测试 第四章测试 第五章测试 第六章测试 第七章测试 第八章测试 第九章测试 第十章测试 第十一章测试 第十二章测试 第一章…

传统技术如何阻碍零信任以及如何应对

随着组织采用零信任安全模型&#xff0c;传统技术制造了一些障碍。事实上&#xff0c;根据最近的一项研究&#xff0c;更换或重建现有的遗留基础设施是实施零信任的最大挑战。 通用动力公司的 2022 年零信任研究报告对美国联邦、民事和国防机构的 300 名 IT 和项目经理进行了调…

计算机毕设Python+Vue兴澜幼儿园管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

重定向和缓冲区

文章目录一个奇怪的现象缓冲区详解如何理解缓冲区缓冲区是谁给我提供的&#xff1f;缓冲区的源码体现案例&#xff1a;模拟实现FILE结构体第二个奇怪的现象重定向命令行上使用重定向操作dup2系统调用接口stdout和stderror一个奇怪的现象 首先&#xff0c;我们来看这样一段代码…

毕业设计 - 基于Java的聊天室系统设计与实现【源码+论文】

文章目录前言一、项目设计1. 模块设计服务器模块设计客户端模块设计2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 java 设计项目: 基于Java聊天室系统的设计与实现 一、项目设计 1. 模块设计 服务器模块设计 服务端的功能主要如下&#xff1a; 一&#xf…

R语言绘制森林图

在绘制森林图之前当然需要先下载RStudio软件啦&#xff0c;在下载后需要安装对应的rtool,最后将两者关联起来才能使用其中对应的包&#xff0c;否则只安装了软件很多功能不能使用而且还会报错&#xff0c;这篇文章主要是总结怎么使用forestploter包绘制森林图&#xff0c;本来是…

【Linux修炼手册:基本指令(完结)】

Life is about waiting for the right moment to act. 目录 1 zip/unzip指令 2 tar指令&#xff08;重要&#xff09;&#xff1a;打包/解包&#xff0c;不打开它&#xff0c;直接看内容 3 bc指令 4 uname –r指令 5 重要的几个热键[Tab],[ctrl]-c, [ctrl]-d 6 shutdown 7…

智能语音之远场关键词识别实践(二)

上篇&#xff08;智能语音之远场关键词识别实践&#xff08;一&#xff09;&#xff09;讲了“远场关键词识别”项目中后端上的实践。本篇将讲在前端上的一些实践以及将前端和后端连起来形成一个完整的方案。下图是其框图&#xff1a;&#xff08;麦克风阵列为圆阵且有四个麦克…

SpringMVC【学习笔记】

SpringMVC是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web 框架&#xff0c;即使用了MVC架构模式的思想&#xff0c;将web 层进行职责解耦&#xff0c;基于请求驱动指的就是使用请求-响应模型&#xff0c;框架的目的就是帮助我们简化…

看2022年卡塔尔世界杯有感

一、我印象中第一次看世界杯是2010年南非世界杯 自己第一次踢球是什么时候已经记不清了&#xff0c;大概是小学时候。因为我印象中第一次看世界杯是2010年南非世界杯&#xff0c;因为世界杯主题曲也比较好听&#xff0c;当然&#xff0c;我认为1998年法国世界杯的主题曲最为经…