golang监听消息队列rabbitmq任务脚本,当rabbimq消息队列断开连接后自动重试,重新唤起协程执行任务

需求背景:

goalng常驻内存任务脚本监听rbmq执行任务

任务脚本由supervisor来管理

当rabbitmq长时间断开连接会出现如下图 进程处于fatal状态

假如因为不可抗拒因素,rabbitmq服务器内存满了或者其它原因导致rabbitmq消息队列服务停止了

如果是短时间的停止重启,supervisor是可以即时唤醒该程序。如果服务器长时间没有恢复正常运行,程序就会出现fatal进程启动失败的状态,此时可以通过告警来提醒开发人员

如果以上告警能时时通知运维人员此问题可以略过了。今天讨论的是如果在长时间断开连接还能在服务器恢复正常情况下自动实现重连。

代码实现一:

消费者:

rabbitmq代码

实现重连方式很多,下面实现方式比较简单

1.Recv方法创建ampq链接

2.启动协程开始执行任务 

MqOpenChannel 打开一个channel通道处理amqp消息

拿到消息 处理任务

  3,协程中捕获异常发送消息到taskQuit <- struct{}{}

  4,主进程监听taskQuit管道 开始尝试重新链接amqp 直到链接成功

  5,重新链接成功后启动新的协程处理任务

主要代码分析: