redis 发布订阅 的简单用法
背景
目前所使用的爬虫管理平台在自动获取git代码时会有拉不下来代码的情况,导致服务器上运行的不是最新的代码
解决方案
代码合并到 master 分支上之后,通过 webhook 触发消息发布接口,服务器在收到监听到消息开始从 git 的 master 分支上拉去代码
因为拉取的代码存放在宿主机中,docker 需要做一个磁盘映射,把宿主机和容器的目录做一个映射
发布
import datetime
import redis
r = redis.StrictRedis(host='', port=6379, db=0, password='')
# 发布消息到频道
r.publish('alert:crawler-spider', f"last update time: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
订阅
import os
import socket
import msg_alert
import redis
r = redis.StrictRedis(host='', port=6379, db=0, password='')
try:
def handle_message(message):
# TODO 拉取代码
print(f"Received message: {message['data']}")
os_system = os.system("cd /root/crawler-spider && git pull")
if os_system != 0:
# 拉取失败报警
msg_alert.send_msg(bot_key,
'text',
f'代码拉取失败, 机器IP:{socket.gethostbyname(socket.gethostname())}')
return
pubsub = r.pubsub()
pubsub.subscribe('alert:crawler-spider')
for message in pubsub.listen():
if message['type'] == 'message':
handle_message(message)
except Exception as e:
msg_alert.send_msg(bot_key,
'text',
f'代码拉取失败, 机器IP:{socket.gethostbyname(socket.gethostname())}')