使用supervisor守护RabbitMQ的消费者进程

在使用RabbitMQ进行异步消息处理时,总是发现开启了消费者进程后,不管是开启1个还是多个,总是过一段时间,比如几分钟或10几分钟后,就自动断开了,导致queue中的消息大量堆积,无法处理。

为了保证消费者一直持续高性能的运行,采用supervisor来监管,kill了就自动重启

其原理:

rabbitmq在收到来自客户端的connection.tune-ok信令后,启用心跳检测,

rabbitmq会为每个tcp连接创建两个进程用于心跳检测:

一个进程,定时检测tcp连接上是否有数据发送(这里的发送是指rabbitmq发送数据给客户端),如果一段时间内没有数据发送给客户端,则立即发送一个心跳包给客户端(也就是消费者),然后循环进行下一次检测;

另一个进程,定时检测tcp连接上是否有数据的接收,如果一段时间内没有收到任何数据,则判定为心跳超时,最终会关闭tcp连接。

最后解决方法:

安装并配置supervisor,将消费者进程守护起来,一旦进程关闭就自动重启。  

环境:Centos

第一步:下载

  1. yum install -y epel-release

  2. yum install -y supervisor

第二步:配置

cd /etc/
mkdir supervisord.d
echo_supervisord_conf > supervisord.conf
vim /etc/supervisord.conf

#加入以下配置信息
[include]
files = /etc/supervisord.d/*.conf

 第三步:开机启动服务文件 (写入文件位置 vim   /etc/init.d/supervisord )

#!/bin/sh
#
# /etc/init.d/supervisord
#
# Supervisor is a client/server system that
# allows its users to monitor and control a
# number of processes on UNIX-like operating
# systems.
#
# chkconfig: - 64 36
# description: Supervisor Server
# processname: supervisord
 
# Source init functions
. /etc/rc.d/init.d/functions
 
prog="supervisord"
 
prog_bin="/usr/bin/supervisord"
PIDFILE="/var/run/$prog.pid"
 
start()
{
       echo -n $"Starting $prog: "
       ###注意下面这一行一定得有-c /etc/supervisord.conf   不然修改了配置文件根本不生效!
       daemon $prog_bin -c /etc/supervisord.conf --pidfile $PIDFILE
       [ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog startup"
       echo
}
 
stop()
{
       echo -n $"Shutting down $prog: "
       [ -f $PIDFILE ] && killproc $prog || success $"$prog shutdown"
       echo
}
 
case "$1" in
 
 start)
   start
 ;;
 
 stop)
   stop
 ;;
 
 status)
       status $prog
 ;;
 
 restart)
   stop
   start
 ;;
 
 *)
   echo "Usage: $0 {start|stop|restart|status}"
 ;;
 
esac

三、执行命令 

chmod +x /etc/init.d/supervisord
chkconfig --add supervisord
chkconfig supervisord on
service supervisord start

第四步:开启web查看

# 如果想通过web查看管理的进程,加入以下代码,监听9001,默认用户user,默认密码123

[inet_http_server] 
port=9001
username=user     
password=123

第五步:创建监听任务   (创建在 vim  /etc/supervisord.d/rabbitmq_worker.conf 文件)

[program:rabbitmq_worker]
command=curl http://IP/Delay.Consumer/start        ;启动时命令行执行操作
autostart=true                                     ;是否随supervisor启动
autorestart=true                                   ;是否在挂了之后重启,意外关闭后会重启,比如kill掉!
startsecs=10                                       ;持续运行多久,认为运行成功
startretries=3                                     ;启动尝试次数
stderr_logfile=/tmp/rabbitmq_worker_err.log        ;标准错误输出的位置
stdout_logfile=/tmp/rabbitmq_worker_out.log        ;标准输出的位置  

第六步:重新启动supervisor服务

service supervisord restart

第七步:查看服务启动状态

[kingfly@kingfly supervisord.d]# lsof -i:9001
COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
superviso 9452 root    4u  IPv4 40107676      0t0  TCP *:etlservicemgr (LISTEN)

第八步:web方式查看(打开后需要登录,默认登录账号:user、默认密码:123)

http://服务器IP:9001

若想修改登录账号密码,可在配置文件里执行修改。 

vim /etc/supervisord.conf

 好了,到这里,通过Supervisor守护消费者进程的解决方案和实战就完成了。

快开始实战吧~ 不懂就问

若想深入了解Supervisor的各种命令,可看最后一篇

Supervisor使用详解

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值