--------------------------------------------------------------------------------------------

一、Rocketmq简介:

--------------------------------------------------------------------------------------------

RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点:
1、支持严格的消息顺序;
2、支持Topic与Queue两种模式;
3、亿级消息堆积能力;
4、比较友好的分布式特性;
5、同时支持Push与Pull方式消费消息;

(本文采用双Master架构模式。

--------------------------------------------------------------------------------------------

二、服务器分布:

--------------------------------------------------------------------------------------------

1、2台服务器信息(我用的虚拟机)

IP地址 主机名 机型 角色 架构模式
 192.168.100.193  rocketmq-master1 20G nameserver、brokerserver  Master1(双Master模式) 
  192.168.100.194  rocketmq-master2 20G  nameserver、brokerserver  Master2(双Master模式)

2、hosts信息添加

vi /etc/hosts

增加以下:

192.168.100.193 rocketmq-master1
192.168.100.194 rocketmq-master2 192.168.100.193 mqnameserver1
192.168.100.194 mqnameserver2

3、系统环境

CentOS 6.3

4、总体架构

--------------------------------------------------------------------------------------------

三、Rocketmq安装与配置

--------------------------------------------------------------------------------------------

1、JDK安装:

tar包解压,然后在/etc/profile中加入如下的环境变量:

生效:source /etc/profile

具体可以参考我的另一篇博客:http://www.cnblogs.com/gmq-sh/p/4328843.html

2、RocketMq安装

下载rocketmq的release版:

https://github.com/alibaba/RocketMQ/releases

文件我放到了/data目录下。

执行一下命令:

tar -zxvf alibaba-rocketmq-3.2..tar.gz -C /usr/local/
mv alibaba-rocketmq alibaba-rocketmq-3.2.
ln -s alibaba-rocketmq-3.2. rocketmq
ll /usr/local

(

以下是分开执行的以及效果:

tar -zxvf alibaba-rocketmq-3.2..tar.gz -C /usr/local/

mv alibaba-rocketmq alibaba-rocketmq-3.2.

修改名字。

建立软连接:

ln -s alibaba-rocketmq-3.2. rocketmq

)

3、环境变量设置(其中ROCKETMQ_HOME是否需要设置,待观察,目前设置与否都可以,因为暂时未在其他地方用到

在 /etc/profile 文件中追加一下配置:

vi /etc/profile

3.1、如果是tar包安装jdk,则如下配置:

## java env
export JAVA_HOME=/usr/java/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

## rocketmq
export ROCKETMQ_HOME=/usr/local/rocketmq

PATH=$JAVA_HOME/bin:$ROCKETMQ_HOME/bin:$PATH

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

3.2、如果是rpm安装,则需要配置JAVA_HOME

在 /etc/profile 文件中添加JAVA_HOME,并且加入到export 的后面:

生效:

source /etc/profile

进入rocketmq的bin目录:

cd /usr/local/rocketmq/bin

(centos系统优化:慎用,我虚拟机总是卡死,还不明白为啥

执行 os.sh的系统优化,原始的sh文件需要修改,不然会导致出问题:

-- sh os.sh -- 未找到错误原因,先不要执行这个命令

(详情参考本人另一篇博文:http://www.cnblogs.com/gmq-sh/p/6957741.html)

目前这个命令已经根据刚才的博文改好了,貌似还是一直在执行,不知道要执行多久,有大神可以指导下?

4、主机名设置

(1)、Master1服务器

vi /etc/hosts

如下:

192.168.100.193 rocketmq-master1
192.168.100.194 rocketmq-master2 192.168.100.193 mqnameserver1
192.168.100.194 mqnameserver2

网络:

vi /etc/sysconfig/network

修改成如下:

sed -i  '/HOSTNAME/d' /etc/sysconfig/network
echo 'HOSTNAME=rocketmq-master1' >> /etc/sysconfig/network
hostname rocketmq-master1

效果如下:

(2)、Master2服务器

vi /etc/hosts
192.168.100.193 rocketmq-master1
192.168.100.194 rocketmq-master2 192.168.100.193 mqnameserver1
192.168.100.194 mqnameserver2 sed -i '/HOSTNAME/d' /etc/sysconfig/network
echo 'HOSTNAME=rocketmq-master2' >> /etc/sysconfig/network
hostname rocketmq-master2

5、RocketMQ配置

(1)、Master1服务器

vi /usr/local/rocketmq/conf/2m-noslave/broker-a.properties

内容如下:

---------------------start-----------------------------------------------------

#启动MessageFilterServer进程
#filterServerNums=1

#Broker所属集群

brokerClusterName=AdpMqCluster
brokerName=broker-a

#0:Master >0:Slave
brokerId=0
namesrvAddr=mqnameserver1:9876;mqnameserver2:9876
defaultTopicQueueNums=4

#线下开启,线上关闭
autoCreateTopicEnable=FALSE

#自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=FALSE

#是否拒绝事务消息接入
rejectTransactionMessage=FALSE

#是否从web服务器获取NameServer地址,针对大规模的Broker集群建议使用这种方式

fetchNamesrvAddrByAddressServer=FALSE

listenPort=10911

#删除文件时间点,默认凌晨4点
deleteWhen=04

#文件保留时间,默认48小时
fileReservedTime=120
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=50000000
destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000
diskMaxUsedSpaceRatio=88

#日志根路径

storePathRootDir=/data/rocketmq/store

#commitLog存储路径
storePathCommitLog=/data/rocketmq/store/commitlog

maxMessageSize=65536

flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000

#Broker 的角色
#ASYNC_MASTER 主从异步复制
#SYNC_MASTER 主从同步双写
#SLAVE Slave

brokerRole=ASYNC_MASTER

#刷盘方式
#ASYNC_FLUSH:异步刷盘
#SYNC_FLUSH:同步刷盘

flushDiskType=ASYNC_FLUSH

checkTransactionMessageEnable=false

sendMessageThreadPoolNums=128
pullMessageThreadPoolNums=128

#是否开启消息索引功能
messageIndexEnable=TRUE

#是否提供安全的消息索引机制,索引保证不丢
messageIndexSafe=FALSE

#磁盘满、且无过期文件情况下 TRUE 表示强制删除文件,优先保证服务可用; FALSE 标记服务不可用,文件不删除
cleanFileForciblyEnable=TRUE

#Topic持久化文件
topicConfigPath=/data/logs/rocketmq/store/config/topics.json

#ConsumerOffset持久化文件
consumerOffsetPath=/data/logs/rocketmq/store/config/consumerOffset.json

#subscriptionGroup 持久化文件
subscriptionGroupPath=/data/logs/rocketmq/store/config/subscriptionGroup.json

---------------------end-----------------------------------------------------

(2)、Master2服务器

vi /usr/local/rocketmq/conf/2m-noslave/broker-b.properties

内容如下:

---------------------start-----------------------------------------------------

#启动MessageFilterServer进程
#filterServerNums=1

#Broker所属集群

brokerClusterName=AdpMqCluster
brokerName=broker-b

#0:Master >0:Slave
brokerId=0

namesrvAddr=mqnameserver1:9876;mqnameserver2:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#线下开启,线上关闭
autoCreateTopicEnable=FALSE

#自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=FALSE

#是否拒绝事务消息接入
rejectTransactionMessage=FALSE

#是否从web服务器获取NameServer地址,针对大规模的Broker集群建议使用这种方式

fetchNamesrvAddrByAddressServer=FALSE

listenPort=10911

#删除文件时间点,默认凌晨4点
deleteWhen=04

#文件保留时间,默认48小时
fileReservedTime=120

#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000

#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88

#日志根路径

storePathRootDir=/data/rocketmq/store

#commitLog存储路径
storePathCommitLog=/data/rocketmq/store/commitlog

#限制的消息大小

maxMessageSize=65536

flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000

#Broker 的角色
#ASYNC_MASTER 主从异步复制
#SYNC_MASTER 主从同步双写
#SLAVE Slave

brokerRole=ASYNC_MASTER

#刷盘方式
#ASYNC_FLUSH:异步刷盘
#SYNC_FLUSH:同步刷盘

flushDiskType=ASYNC_FLUSH

checkTransactionMessageEnable=false

#发消息线程池数量

sendMessageThreadPoolNums=128

#拉消息线程池数量
pullMessageThreadPoolNums=128

#是否开启消息索引功能
messageIndexEnable=TRUE

#是否提供安全的消息索引机制,索引保证不丢
messageIndexSafe=FALSE

#磁盘满、且无过期文件情况下 TRUE 表示强制删除文件,优先保证服务可用; FALSE 标记服务不可用,文件不删除
cleanFileForciblyEnable=TRUE

#Topic持久化文件
topicConfigPath=/data/logs/rocketmq/store/config/topics.json

#ConsumerOffset持久化文件
consumerOffsetPath=/data/logs/rocketmq/store/config/consumerOffset.json

#subscriptionGroup 持久化文件
subscriptionGroupPath=/data/logs/rocketmq/store/config/subscriptionGroup.json

---------------------end-----------------------------------------------------

(3)、修改启动脚本(JVM参数调优)

因为我们之前将nameServer和broker放在了同一台机器上,所以需要分别对nameServer和broker进行jvm的性能调优。生产环境默认即可不要修改。

1)broker的调优(目前是默认配置)

vi /usr/local/rocketmq/bin/runbroker.sh

runbroker.sh需要根据内存大小进行适当地调整

JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g - XX:PermSize=128m -XX:MaxPermSize=320m"

2)nameserver的调优(目前是默认配置)

vi /usr/local/rocketmq/bin/runserver.sh

runserver.sh需要根据内存大小进行适当地调整

JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g - XX:PermSize=128m -XX:MaxPermSize=320m"

6、服务启动

(启动两台机器的NameServer:先启动两台机器的NameServer,再启动两台机器的Borker,关机的时候顺序相反,先关闭两台机器的Broker,再关闭两台机器的Nameserver。)

0.1:日志文件目录自定义

①、创建日志目录

(/data/rocketmq/store/commitlog -->对应的是commitlog日志; /data/logs -->对应的是mq运行及启动等日志目录)

mkdir -p /data/rocketmq/store/commitlog  /data/logs

②、替换rocketmq/conf/目录下的*log.xml文件中的路径

cd /usr/local/rocketmq/conf && sed -i  's#${user.home}#/data#g' *.xml

原始文件(一部分内容):

替换之后:

log目录替换好了。

0.2、防火墙配置

最后要配置一下防火墙:

nameserver端口为

broker端口为

或者如果测试,可以直接关掉防火墙。

(1)、启动NameServer【master1、master2】

cd /usr/local/rocketmq/bin
nohup sh /usr/local/rocketmq/bin/mqnamesrv &

验证nameserver是否启动:

tail -f -n 500 /data/logs/rocketmqlogs/namesrv.log

另一种启动,

nohup sh /usr/local/rocketmq/bin/mqnamesrv >/var/log/ns.log &
验证启动:
tail -f /var/log/ns.log

(2)、启动BrokerServer A【master1】

cd /usr/local/rocketmq/bin
nohup sh mqbroker -c ../conf/2m-noslave/broker-a.properties >/dev/null >& &

最好用绝对路径来执行:

nohup sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &

验证mqbroker是否启动:

jps 查看进程

tail -f -n 500 /data/logs/rocketmqlogs/broker.log

另一种启动指定启动日志的,

nohup sh /usr/local/rocketmq/bin/mqbroker -c ../conf/2m-noslave/broker-a.properties >/var/log/mq.log &
校验:
tail -f /var/log/mq.log

(3)、启动BrokerServer B【master2】

nohup sh /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &

校验:

tail -f -n  /data/logs/rocketmqlogs/broker.log

netstat -ntlp

jps

7、服务关闭

(启动两台机器的NameServer:先启动两台机器的NameServer,再启动两台机器的Borker,关机的时候顺序相反,先关闭两台机器的Broker,再关闭两台机器的Nameserver。)

7.1、关闭broker

7.1.1、直接关闭

sh /usr/local/rocketmq/bin/mqshutdown broker

7.1.2、优雅关闭broker

Broker重启可能会导致正在发往这台机器的的消息发送失败,RocketMQ提供了一种优雅关闭Broker的方法,通过执行以下命令会清除Broker的写权限,过40s后,所有客户

端都会更新Broker路由信息,此时再关闭Broker就不会发生发送消息失败的情况,因为所有消息都发往了其他Broker。

格式如下:

sh mqadmin wipeWritePerm -b brokerName -n namesrvAddr

本broker对应的命令如下:

Master A:

sh mqadmin wipeWritePerm -b broker-a -n 192.168.100.193:9876

Master B:

sh mqadmin wipeWritePerm -b broker-b -n 192.168.100.194:9876

此时在关闭broker:

sh mqshutdown broker

7.2、关闭nameserver:

sh mqshutdown namesrv

--------------------------------------------------------------------------------------------

四、Rocketmq服务健康监控(根据本人实践修正的,可用的监控)

--------------------------------------------------------------------------------------------

1、依赖组件安装

yum -y install nmap

2、创建nameserver监控:(修改后的sh

vi /data/scripts/check_nameserver_health.sh
#!/bin/sh

SRV_PORT=""                    ## 端口号
SRV_PROT="tcp" ## 协议类型
SRV_NAME="rocketmq_nameserver" ## 服务名
ETH1_ADDR="192.168.100.194"
PROT_OPT="S" SCAN_FLAG= TMP_SRV_PROT=`echo ${SRV_PROT} | tr '[A-Z]' '[a-z]'` for ((i=; i<; i++)); do
RETVAL=`/usr/bin/nmap -n -s${PROT_OPT} -p ${SRV_PORT} ${ETH1_ADDR} | grep open`
[[ -n "${RETVAL}" ]] && SCAN_FLAG=;break || sleep
done if [[ ${SCAN_FLAG} -ne ]]; then
[[ -n `ps aux | grep java | grep namesrv` ]] && kill - `ps aux | grep java | awk '/namesrv/{print $2}'`
cd /usr/local/rocketmq/bin && nohup sh mqnamesrv &
fi

注意:】以上的变量:

ETH1_ADDR: 要根据部署的机器的ip修改。

3、brokerserver监控(修改后的sh

vi /data/scripts/check_brokerserver_health.sh

#!/bin/sh

SRV_PORT="10911" ## 端口号
SRV_PROT="tcp" ## 协议类型
SRV_NAME="rocketmq_brokerserver" ## 服务名
ETH1_ADDR="192.168.100.194" ## 服务器IP地址
PROT_OPT="S" ## 协议类型

## 是否已正确扫描
SCAN_FLAG=0

## 最多扫描3次,成功一次即可,以避免网络抖动而导致误判
for ((i=0; i<3; i++)); do
RETVAL=`/usr/bin/nmap -n -s${PROT_OPT} -p ${SRV_PORT} ${ETH1_ADDR} | grep open`
[[ -n "${RETVAL}" ]] && SCAN_FLAG=1;break || sleep 10
done

if [[ ${SCAN_FLAG} -ne 1 ]]; then
[[ -n `ps aux | grep java | grep broker` ]] && kill -9 `ps aux | grep java | awk '/broker/{print $2}'`
cd /usr/local/rocketmq/bin && nohup sh mqbroker -c ../conf/2m-noslave/broker-b.properties &
fi

【注意】

i: 以上红色标注部分,在master2上的名称为“broker-b.properties”

ii: ETH1_ADDR--》要根据所在服务器的ip来写。

4、crontab信息添加(修正后的可用的cron

touch /var/run/check_rocketmq_nameserver.lock
touch /var/run/check_rocketmq_brokerserver.lock echo 'touch /var/run/check_rocketmq_nameserver.lock' >> /etc/rc.d/rc.local
echo 'touch /var/run/check_rocketmq_brokerserver.lock' >> /etc/rc.d/rc.local crontab -e
## 文本编辑中点i输入一下编辑
*/30 * * * * (flock --timeout=0 /var/run/check_rocketmq_nameserver.lock -c 'source /etc/profile;/bin/sh /data/scripts/check_nameserver_health.sh >>/var/log/check_rocketmq_nameserver.log')
*/15 * * * * (flock --timeout=0 /var/run/check_rocketmq_brokerserver.lock -c 'source /etc/profile;/bin/sh /data/scripts/check_brokerserver_health.sh >>/var/log/check_rocketmq_brokerserver.log')

【注意:】

出现问题,不要慌,要找到log,多试试。还出现了,tar包安装jdk,显示所属的用户组是个uucp,这个还不知道是什么原因导致的,最后我又设置了jdk目录的所属改成了root。

问题1:直接在命令行执行:

flock --timeout=0 /var/run/check_rocketmq_nameserver.lock -c 'sh /data/scripts/check_nameserver_health.sh >>/var/log/check_rocketmq_nameserver.log'

可以执行,但是cron任务则一直报错误:

这个错误来源于/rocketmq/bin/runserver.sh:

以此做出推断,是在cron执行启动脚本的时候,环境变量没有读取到JAVA_HOME。经过多方调查,需要再cron中添加环境需要的变量:

*/30 * * * * (flock --timeout=0 /var/run/check_rocketmq_nameserver.lock -c 'source /etc/profile;/bin/sh /data/scripts/check_nameserver_health.sh >>/var/log/check_rocketmq_nameserver.log')

解决: 

1、sh 命令改为 source /etc/profile;/bin/sh 即可解决。

2、设置JAVA_HOME

2.1、如果是tar包安装的jdk,则只要/etc/profile中设置了JAVA_HOME即可。

2.2、如果是rpm安装,则必须也要在/etc/profile中设置JAVA_HOME,cron任务才能正确执行

附:

1、cron命令可以参考:

http://www.cnblogs.com/gmq-sh/p/6971588.html

2、linux使用flock文件锁解决crontab冲突问题

使用linux flock 文件锁实现任务锁定,解决冲突

格式:

flock [-sxun][-w #] fd#

flock [-sxon][-w #] file [-c] command

选项

-s, --shared:    获得一个共享锁
-x, --exclusive: 获得一个独占锁
-u, --unlock: 移除一个锁,通常是不需要的,脚本执行完会自动丢弃锁
-n, --nonblock: 如果没有立即获得锁,直接失败而不是等待
-w, --timeout: 如果没有立即获得锁,等待指定时间
-o, --close: 在运行命令前关闭文件的描述符号。用于如果命令产生子进程时会不受锁的管控
-c, --command: 在shell中运行一个单独的命令
-h, --help 显示帮助
-V, --version: 显示版本

参考:http://blog.csdn.net/fdipzone/article/details/38284009

--------------------------------------------------------------------------------------------

五、Rocketmq服务健康监控(网上找的,不能直接用,太多bug,可用的请参考上面的,近供参考)

--------------------------------------------------------------------------------------------

1、依赖组件安装

yum -y install nmap

2、nameserver监控

vi /data/scripts/check_nameserver_health.sh
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin SRV_PORT="9876" ## 端口号
SRV_PROT="tcp" ## 协议类型
SRV_NAME="rocketmq_nameserver" ## 服务名 ## 是否已正确扫描
SCAN_FLAG=0 for ETH_NAME in `/sbin/ifconfig | grep eth0 | awk '{print $1}'`
do
ETH1_ADDR=`/sbin/ifconfig ${ETH_NAME} | awk -F ':' '/inet addr/{print $2}' | sed 's/[a-zA-Z ]//g'`
[[ -z "${ETH1_ADDR}" ]] && continue || break
done TMP_SRV_PROT=`echo ${SRV_PROT} | tr '[A-Z]' '[a-z]'` if [[ "${TMP_SRV_PROT}" == "tcp" ]]; then
PROT_OPT="S"
elif [[ "${TMP_SRV_PROT}" == "udp" ]]; then
PROT_OPT="U"
else
echo "未知的协议类型!" && exit1
fi ## 最多扫描3次,成功一次即可,以避免网络抖动而导致误判
for ((i=0; i<3; i++)); do
RETVAL=`/usr/bin/nmap -n -s${PROT_OPT} -p ${SRV_PORT} ${ETH1_ADDR} | grep open`
[[ -n "${RETVAL}" ]] && SCAN_FLAG=1;break || sleep 10
done if [[ ${SCAN_FLAG} -ne 1 ]]; then
[[ -n `ps aux | grep java | grep namesrv` ]] && kill -9 `ps aux | grep java | awk '/namesrv/{print $2}'`
cd /usr/local/rocketmq/bin && nohup sh mqnamesrv &
fi

注意:

eth0--》要根据自己网卡来写。

3、brokerserver监控

vi /data/scripts/check_brokerserver_health.sh
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin SRV_PORT="10911" ## 端口号
SRV_PROT="tcp" ## 协议类型
SRV_NAME="rocketmq_brokerserver" ## 服务名 ## 是否已正确扫描
SCAN_FLAG=0 for ETH_NAME in `/sbin/ifconfig | grep eth0 | awk '{print $1}'`
do
ETH1_ADDR=`/sbin/ifconfig ${ETH_NAME} | awk -F ':' '/inet addr/{print $2}' | sed 's/[a-zA-Z ]//g'`
[[ -z "${ETH1_ADDR}" ]] && continue || break
done TMP_SRV_PROT=`echo ${SRV_PROT} | tr '[A-Z]' '[a-z]'` if [[ "${TMP_SRV_PROT}" == "tcp" ]]; then
PROT_OPT="S"
elif [[ "${TMP_SRV_PROT}" == "udp" ]]; then
PROT_OPT="U"
else
echo "未知的协议类型!" && exit1
fi ## 最多扫描3次,成功一次即可,以避免网络抖动而导致误判
for ((i=0; i<3; i++)); do
RETVAL=`/usr/bin/nmap -n -s${PROT_OPT} -p ${SRV_PORT} ${ETH1_ADDR} | grep open`
[[ -n "${RETVAL}" ]] && SCAN_FLAG=1;break || sleep 10
done if [[ ${SCAN_FLAG} -ne 1 ]]; then
[[ -n `ps aux | grep java | grep broker` ]] && kill -9 `ps aux | grep java | awk '/broker/{print $2}'`
cd /usr/local/rocketmq/bin && nohup sh mqbroker -c ../conf/2m-noslave/broker-a.properties &
fi

【注意】

i: 以上红色标注部分,在master2上的名称为“broker-b.properties”

ii: eth0--》要根据自己网卡来写。

4、crontab信息添加(有很多坑,具体请用下面新的信息添加

# touch /var/run/check_rocketmq_nameserver.lock
# touch /var/run/check_rocketmq_brokerserver.lock # echo 'touch /var/run/check_rocketmq_nameserver.lock' >> /etc/rc.d/rc.local
# echo 'touch /var/run/check_rocketmq_brokerserver.lock' >> /etc/rc.d/rc.local # crontab -e
*/2 * * * * (flock --timeout=0 /var/run/check_rocketmq_nameserver.lock /data/scripts/check_nameserver_health.sh >/dev/null 2>&1) */2 * * * * (flock --timeout=0 /var/run/check_rocketmq_brokerserver.lock /data/scripts/check_brokerserver_health.sh >/dev/null 2>&1)

注意:

crontab -e

然后在vi编辑器里输入即可。


(原创)Rocketmq分布式消息队列的部署与监控的更多相关文章

  1. RocketMQ 消息队列单机部署及使用

    转载请注明来源:http://blog.csdn.net/loongshawn/article/details/51086876 相关文章: <RocketMQ 消息队列单机部署及使用> ...

  2. 分布式消息队列RocketMQ(一)安装与启动

    分布式消息队列RocketMQ 一.RocketMQ简介 RocketMQ(火箭MQ) 出自于阿里,后开源给apache成为apache的顶级开源项目之一,顶住了淘宝10年的 双11压力 是电商产品的 ...

  3. C#分布式消息队列 EQueue 2.0 发布啦

    前言 最近花了我几个月的业余时间,对EQueue做了一个重大的改造,消息持久化采用本地写文件的方式.到现在为止,总算完成了,所以第一时间写文章分享给大家这段时间我所积累的一些成果. EQueue开源地 ...

  4. EQueue - 一个C#写的开源分布式消息队列的总体介绍

    前言 本文想介绍一下前段时间在写enode时,顺便实现的一个分布式消息队列equeue.这个消息队列的思想不是我想出来的,而是通过学习阿里的rocketmq后,自己用c#实现了一个轻量级的简单版本.一 ...

  5. 分享一个c#写的开源分布式消息队列equeue

    分享一个c#写的开源分布式消息队列equeue 前言 equeue消息队列中的专业术语 Topic Queue Producer Consumer Consumer Group Broker 集群消费 ...

  6. Nginx集群之WCF分布式消息队列

    目录 1       大概思路... 1 2       Nginx集群之WCF分布式消息队列... 1 3       MSMQ消息队列... 2 4       编写WCF服务.客户端程序... ...

  7. 分布式消息队列Apache Pulsar

    Pulsar简介 Apache Pulsar是一个企业级的分布式消息系统,最初由Yahoo开发并在2016年开源,目前正在Apache基金会下孵化.Plusar已经在Yahoo的生产环境使用了三年多, ...

  8. EQueue - 一个纯C#写的分布式消息队列介绍2

    一年前,当我第一次开发完EQueue后,写过一篇文章介绍了其整体架构,做这个框架的背景,以及架构中的所有基本概念.通过那篇文章,大家可以对EQueue有一个基本的了解.经过了1年多的完善,EQueue ...

  9. [.NET领域驱动设计实战系列]专题八:DDD案例:网上书店分布式消息队列和分布式缓存的实现

    一.引言 在上一专题中,商家发货和用户确认收货功能引入了消息队列来实现的,引入消息队列的好处可以保证消息的顺序处理,并且具有良好的可扩展性.但是上一专题消息队列是基于内存中队列对象来实现,这样实现有一 ...

随机推荐

  1. CodeForces 433C Ryouko's Memory Note (中位数定理)

    <题目链接> 题目大意:给你一堆数字,允许你修改所有相同的数字成为别的数字,不过只能修改一次,问你修改后序列相邻数字的距离和最小是多少. 解题分析: 首先,修改不是任意的,否则那样情况太多 ...

  2. POJ2387 Til the Cows Come Home【Kruscal】

    题目链接>>> 题目大意: 谷仓之间有一些路径长度,然后要在这些谷仓之间建立一些互联网,花费的成本与长度成正比,,并且要使这些边连起来看的像一课“树”,然后使成本最大 解题思路: 最 ...

  3. Apache系列:Apache的全局配置

    配置文件组成: 整个配置文件由3段组成: (1)全局配置:对主服务器或虚拟机都有效,且有些功能是服务器自身工作属性: (2)主服务器:主站属性: (3)虚拟主机:虚拟主机及属性定义 注:第二段和第三段 ...

  4. Dotnet core结合jquery的前后端加密解密密码密文传输的实现

    在一个正常的项目中,登录注册的密码是密文传输到后台服务端的,也就是说,首先前端js对密码做处理,随后再传递到服务端,服务端解密再加密传出到数据库里面.Dotnet已经提供了RSA算法的加解密类库,我们 ...

  5. VMware6.0-vCenter的安装准备及安装

    由于6.0的VCSA安装需要跳板主机来辅助,而在5.5时时可用用OVA导入模式安装的. 首先安装跳板插件 安装完成后,点击setup链接. 设置 Single Sign-On (SSO),将root和 ...

  6. 【DWM1000】 code 解密2一 工程初始化代码分析

    instance_init 函数追下去,绝大多数的代码都在初始化如下结构体 typedef struct { INST_MODE mode; instance_init -ANCHOR //insta ...

  7. Struts2网页面传值两种方式

    第一种方式: /** 列表 */ public String list() throws Exception { List<Role> roleList = roleService.fin ...

  8. bzoj 4459: [Jsoi2013]丢番图 -- 数学

    4459: [Jsoi2013]丢番图 Time Limit: 10 Sec  Memory Limit: 64 MB Description 丢番图是亚历山大时期埃及著名的数学家.他是最早研究整数系 ...

  9. 【C语言程序】让用户输入十个数,用冒泡排序法从小到大排序

    #include <stdio.h> #define N 10 void swap(int*a,int*b); int main(int argc, char *argv[]) {  in ...

  10. Python基础-内置函数、模块、函数、json

    内置函数 1.id()返回对象的内存地址: 2. type() 返回对象类型:   3.print()打印输出: 4. input()接受一个标准输入数据,返回为string类型: 5. list() ...