服务环境

操作系统:centos7.6

[root@localhost opt]# uname -srm

Linux 3.10.0-957.el7.x86_64 x86_64

Java环境:

[root@localhost opt]# java -version

java version "1.8.0_201"

Java(TM) SE Runtime Environment (build 1.8.0_201-b09)

Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

Maven库类型

[root@localhost opt]# mvn -version

Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)

Maven home: /opt/apache-maven-3.8.5

Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_201-amd64/jre

Default locale: zh_CN, platform encoding: UTF-8

OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"

两台主服务器:

192.168.161.11 master1

192.168.161.12 master2

两台从服务器

192.168.161.13 slave1

192.168.161.14 slave2

服务搭建

防火墙配置

宿主机需要远程访问虚拟机的rocketmq服务和web服务,需要开放相关的端口号,简单粗暴的方式是直接关闭防火墙

# 关闭防火墙

[root@localhost opt]# systemctl stop firewalld.service

# 查看防火墙的状态

[root@localhost opt]# firewall-cmd --state

# 禁止firewall开机启动

[root@localhost opt]# systemctl disable firewalld.service

或者为了安全,只开放特定的端口号,RocketMQ默认使用3个端口:9876 、10911 、11011 。如果防火墙没有关闭的话,那么防火墙就必须开放这些端口:

nameserver 默认使用 9876 端口

master 默认使用 10911 端口

slave 默认使用11011 端口

# 开放name server默认端口

[root@localhost opt]# firewall-cmd --remove-port=9876/tcp --permanent

# 开放master默认端口

[root@localhost opt]# firewall-cmd --remove-port=10911/tcp --permanent

# 开放slave默认端口 (当前集群模式可不开启)

[root@localhost opt]# firewall-cmd --remove-port=11011/tcp --permanent

# 重启防火墙

[root@localhost opt]# firewall-cmd --reload

下载

在主服务器上下载rocketmq启动包

[root@localhost opt]# wget http://ftp.jaist.ac.jp/pub/apache/rocketmq/4.9.3/rocketmq-all-4.9.3-bin-release.zip

[root@localhost opt]#

scp rocketmq-all-4.9.3-bin-release.ziproot@192.168.161.14:/opt

解压

[root@localhost opt]# unzip rocketmq-all-4.9.3-bin-release.zip

[root@localhost opt]# mv rocketmq-4.9.3 /usr/local/rocketmq

配置环境变量

[root@localhost opt]# vim /etc/profile

export ROCKETMQ_HOME=/usr/local/rocketmq

export PATH=$PATH::$ROCKETMQ_HOME/bin

刷新环境变量

[root@localhost opt]# source /etc/profile

Hosts 添加信息

注意:该步骤非必须,该步骤目的是为了在后续步骤中修改参数文件时可以用英文名字指代具体IP地址。如果不执行该步骤,在参数文件中填入具体IP地址即可

[root@localhost opt]# vim /etc/hosts

# nameserver

192.168.161.11 rocketmq-nameserver1

192.168.161.12 rocketmq-nameserver2

# broker

192.168.161.11 rocketmq-master1

192.168.161.12 rocketmq-master2

192.168.161.13 rocketmq-slave1

192.168.161.14 rocketmq-slave2

创建消息存储路径

[root@localhost opt]# mkdir /usr/local/rocketmq/store

[root@localhost opt]# mkdir /usr/local/rocketmq/store/commitlog

[root@localhost opt]# mkdir /usr/local/rocketmq/store/consumequeue

[root@localhost opt]# mkdir /usr/local/rocketmq/store/index

broker配置文件

master1 服务器IP:192.168.161.11

[root@localhost opt]# cd /usr/local/rocketmq/conf/2m-2s-sync/

[root@localhost 2m-2s-sync]# cp broker-a.properties broker-a.properties.bak

[root@localhost 2m-2s-sync]# vim broker-a.properties

修改配置如下:

需要重点注意的参数为:

brokerClusterName

brokerName

brokerId

namesrvAddr

storePathRootDir

storePathCommitLog

storePathConsumeQueue

storePathIndex

storeCheckpoint

abortFile

brokerRole

flushDiskType

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
#若没有执行HOST添加信息那步,则需将rocketmq-nameserver1替换为IP1,rocketmq-nameserver2替换为IP2
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
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
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

简单复制版

brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
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
abortFile=/usr/local/rocketmq/store/abort
maxMessageSize=65536

master2  IP:192.168.161.12

[root@localhost opt]# cd /usr/local/rocketmq/conf/2m-2s-sync/

[root@localhost 2m-2s-sync]# cp broker-b.properties broker-b.properties.bak

[root@localhost 2m-2s-sync]# vim broker-b.properties

配置文件如下:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
#若没有执行HOST添加信息那步,则需将rocketmq-nameserver1替换为IP1,rocketmq-nameserver2替换为IP2
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
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
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

便捷版

brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=SYNC_FLUSH
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=10911
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
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
abortFile=/usr/local/rocketmq/store/abort
maxMessageSize=65536

slave1 服务器IP:192.168.161.13

[root@localhost opt]# cd /usr/local/rocketmq/conf/2m-2s-sync/

[root@localhost 2m-2s-sync]# cp broker-a-s.properties broker-a-s.properties.bak

[root@localhost 2m-2s-sync]# vim broker-a-s.properties

更改内容为:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
#若没有执行HOST添加信息那步,则需将rocketmq-nameserver1替换为IP1,rocketmq-nameserver2替换为IP2
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store-s
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store-s/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store-s/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store-s/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store-s/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store-s/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

方便复制版:

brokerClusterName=rocketmq-cluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
namesrvAddr=rocketmq-nameserver1:9877;rocketmq-nameserver2:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=11011
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/rocketmq/store-s
storePathCommitLog=/usr/local/rocketmq/store-s/commitlog
storePathConsumeQueue=/usr/local/rocketmq/store-s/consumequeue
storePathIndex=/usr/local/rocketmq/store-s/index
storeCheckpoint=/usr/local/rocketmq/store-s/checkpoint
abortFile=/usr/local/rocketmq/store-s/abort
maxMessageSize=65536

slave2 IP:192.168.161.14

[root@localhost opt]# cd /usr/local/rocketmq/conf/2m-2s-sync/

[root@localhost 2m-2s-sync]# cp broker-b-s.properties broker-b-s.properties.bak

[root@localhost 2m-2s-sync]# vim broker-b-s.properties

更改内容:

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
#若没有执行HOST添加信息那步,则需将rocketmq-nameserver1替换为IP1,rocketmq-nameserver2替换为IP2
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
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
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

方便复制版


brokerClusterName=rocketmq-cluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=SYNC_FLUSH
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
defaultTopicQueueNums=4
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
listenPort=11011
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=300000
diskMaxUsedSpaceRatio=88
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
abortFile=/usr/local/rocketmq/store/abort
maxMessageSize=65536

修改启动脚本

  1. runbroker.sh
[root@localhost bin]# vim /usr/local/rocketmq/bin/runbroker.sh需要根据内存大小进行适当的对JVM参数进行调整:
#===================================================
# 开发环境配置 JVM Configuration
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"

2.runserver.sh

vim /usr/local/rocketmq/bin/runserver.shJAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

启动nameserver集群 192.168.161.11 && 192.168.161.12

cd /opt/rocketmq/bin
nohup sh mqnamesrv &

启动broker集群

Master1(192.168.161.11):
[root@localhost 2m-2s-sync]# cd /usr/local/rocketmq/bin/
[root@localhost bin]# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-a.properties &Master2(192.168.161.12):
[root@localhost 2m-2s-sync]# cd /usr/local/rocketmq/bin/
[root@localhost bin]# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-b.properties &启动slave1(192.168.161.13):
[root@localhost 2m-2s-sync]# cd /usr/local/rocketmq/bin
[root@localhost bin]# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-a-s.properties &启动slave2(192.168.161.14):
[root@localhost 2m-2s-sync]# cd /usr/local/rocketmq/bin/
[root@localhost bin]# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-b-s.properties &

使用mqadmin管理工具查看集群信息:

[root@rocketmq-nameserver1 bin]# sh mqadmin clusterList -n localhost:9876

查看日志

# 查看nameServer日志

tail -500f ~/logs/rocketmqlogs/namesrv.log

# 查看broker日志

tail -500f ~/logs/rocketmqlogs/broker.log

rocketmq双主双从----四台服务器相关推荐

  1. Linux教程:RocketMq介绍以及集群服务搭建(双主双从同步双写)并安装可视化平台RocketMq-Dashboard

    一.介绍 1.什么是MQ MQ(Message Queue)消息队列,是基础数据结构中"先进先出"的一种数据结构.一般用来解决应用解耦,异步消息,流量削峰等问题,实现高性能,高可用 ...

  2. MySQL学习四:MySQL双主双从

    文章目录 一.MySQL双主双从配置开启二进制日志 二.[配置每一台MySQL服务器的配置文件my.cnf](https://blog.csdn.net/huiguo_/article/details ...

  3. mycat与mysql proxy_高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)...

    既然大家都知道了Mysql分布式在大型网站架构中的作用,在这里就不再阐述.本片博客文章是基于我曾经搭建过的一个Mysql集群基础上实现的,实现过双主热备.读写分离.分库分表. 环境 centos6.4 ...

  4. RocketMQ 4.5.1 双主双从异步复制环境搭建

    基础环境 操作系统:CentOS7 实例:192.168.63.129,192.168.63.130,192.168.63.131,192.168.63.132 Java:jdk-8u191-linu ...

  5. Centos6.9下RocketMQ3.4.6高可用集群部署记录(双主双从+Nameserver+Console)

    之前的文章已对RocketMQ做了详细介绍,这里就不再赘述了,下面是本人在测试和生产环境下RocketMQ3.4.6高可用集群的部署手册,在此分享下: 1) 基础环境 ip地址 主机名 角色 192. ...

  6. MySQL主从复制配置过程(双主双从模式)

    环境准备 为了搭建MySQL数据库主从复制(双主双从模式),准备一下四台服务器,并明确了各节点的角色及IP地址. 角色 IP地址 节点名称 Master1 192.168.67.140 CentOS0 ...

  7. 【mysql】mysql的数据库主从2(双主双从)

    在搭建mysql的数据库双主双从之前,我们在四台不同的服务器上搭建mysql数据库,安装的步骤在下面的博客中: linux安装mysql :https://blog.csdn.net/wangyunz ...

  8. MyCat学习:使用MySQL搭建主从复制(双主双从模式)

    首先,上一篇我们建立了一主一丛模式的MySQL读写分离 点击这里 那么接下来,我们搭建双主双从模式的读写分离,并且使用MyCat登录访问 原理:master1,master2,slave1,slave ...

  9. Mysql 集群双主双从安装使用详细讲解

    文章目录 下载Mysql 安装单机Mysql 配置Mysql集群 双Master配置 master1配置 master2配置 配置说明 双Slave配置 Slave1配置 Slave2配置 双 Mas ...

  10. 数据库读写分离(单主单从+双主双从)

    单主单从 name ip node1 192.168.44.100 安装mycat node5 192.168.44.33 主 node3 192.168.44.11 从 读写分离的前提是首先要先将数 ...

最新文章

  1. html作业登陆界面
  2. 实时个性化推荐系统简述
  3. struts2 去掉或修改后缀名
  4. 与詹金斯一起将GitLab中的Gradle项目发布到Artifactory
  5. SAP License:SAP S/4HANA就是答案
  6. ​对比学习还能这样用:字节推出真正的多到多翻译模型mRASP2
  7. 用最通俗易懂的方式打开区块链!
  8. python 笔记 之 线程锁
  9. python教程视频 网盘-Python学习路线2019版(课程大纲+视频教程+网盘资源下载)...
  10. 原生js实现分页效果(带实例)
  11. Vs2010 上的配置Opencv2.2
  12. 基于opencv的身份证识别系统
  13. 微信小程序UI设计(二)之view组件
  14. 微信公众号运营必备神器汇总
  15. access百科 pc_PC Access SMART
  16. windows 7 开机启动提示bcd错误修复方法
  17. 磨刀不误砍柴工—ElasticSearch的schema详解
  18. CSUOJ 1256 天朝的单行道(最短路)
  19. ddms java 截图_从Android设备获取实时截屏
  20. Echarts图表及数据刷新问题

热门文章

  1. 论文解读:《EMDLP:RNA甲基化位点预测的合奏多尺度深度学习模型》
  2. 2021最新城市人才引进计划!硕博满满的福利!
  3. 连续分配存储管理方式
  4. 两个分数化简比怎么化_化简比的六种方法
  5. OSChina 周一乱弹 —— 外卖是什么垃圾?
  6. 高尔顿钉板与二项分布
  7. c语言中6 2等于多少,概率中C62怎么算(6是下标,2标在上面)
  8. 多个独立的excel文件合并到一个excel文件的多个工作表Sheet中
  9. for i in range()使用方法
  10. 谷歌浏览器提示Flash版本过低,要求更新或运行一次