首页 > 数据库 >redis 发布订阅 的简单用法

redis 发布订阅 的简单用法

时间:2024-01-16 14:44:51浏览次数:29  
标签:订阅 socket 代码 redis 用法 import message alert

背景

目前所使用的爬虫管理平台在自动获取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())}')

标签:订阅,socket,代码,redis,用法,import,message,alert
From: https://www.cnblogs.com/hanyanling/p/17966560

相关文章

  • Redis - SORT
                      ......
  • halcon中的tuple用法
    a:=[-10,100,130]t:=[-0.5,0.5,1]tuple_abs(a,Abs)*计算一个元组的绝对值*[10,100,130]tuple_acos(t,ACos)*计算一个元组的反余弦*参数1:输入元组。限制:-1<=t<=1*[2.0944,1.0472,0.0]tuple_add(a,t,Sum)*两个元组相加*[-10.5,100.5,131]tuple_asin......
  • Markdown的一些基本用法
    Markdown学习标题:一级标题一个#加一个空格二级标题两个#加空格三级标题三个#加空格二级标题三级标题四级标题字体Hello,Word!(前后各加两个*加粗)Hello,Word!(前后各加一个*加斜)Hello,Word!(前后各加三个*加粗,加斜)Hello,Word!(前后各加两个~删除线)引用(>......
  • Redis未授权访问漏洞
    前置知识Redis是一个由c语言编写的基于内存且可以持久化的日志型,key-value型数据库。之所以说他是基于内存而且可以持久化,因为它大部分数据都存储在内存中,这样提高了读写效率。而且还可以定时将内存数据同步到磁盘中。他虽然不是web服务,但是很多web应用依赖他,所以它也属于web安......
  • Redis分布式锁
    初始第一版代码背景:Redis中stock字段的value设为300超卖问题:多个请求(3个)同时调用这个接口,他们查出的stock都是300,都进行减1操作,实际上需要减3得到297,但都是执行300-1记录stock为299。解决:使用jdk自带的锁,可以使多个请求排队,实现同一时间单个请求执行锁区间的代码。架构背......
  • Redis - Sorted Set Use Cases
         ......
  • Redis - Set Use Cases
          ......
  • 配置redisTemplate序列化,解决乱码与反序列化失败
    /***@projectName:MultiModuleDemo*@package:com.example.config*@className:RedisConfig*@description:TODO(配置RedisTemplate序列化)*@date:2023/12/1821:08*@version:1.0*/@ConfigurationpublicclassRedisConfig{@BeanpublicRedi......
  • Redis - Design 2
                            ......
  • kubectl与 jq的另外一些用法
    背景:在日常运维工作中,我们需要管理和操作大量的配置文件,这在使用Kubernetes集群管理应用时尤为常见。Kubernetes提供了一个名为ConfigMap的资源对象,它用于存储应用的配置信息。有时,我们需要查找哪些ConfigMap包含特定的配置值,例如一个特定的IP地址或者字符串。在这篇技术......