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())}')
posted @ 2024-01-16 14:38  寒菱  阅读(12)  评论(0编辑  收藏  举报