关于结合faststream + python rq callback 进行job 状态标记的简单说明

以前简单介绍过基于faststream + python rq callback 进行job 状态标记,以下是结合源码说明下处理

参考玩法

代码实现

  • faststream 参考代码
from faststream.redis import RedisBroker
 
from faststream.asgi import AsgiFastStream,get,AsgiResponse
 
from typing import Any
 
broker = RedisBroker("redis://localhost:6379",validate=True)
 
@get
async def liveness_ping(scope):
    return AsgiResponse(b"is liveness ping", status_code=200)
 
app = AsgiFastStream(broker,asgi_routes=[
    ("/",liveness_ping),
],
asyncapi_path="/docs",
)
 
# 为了演示此处通过response channel 标记为job 回调的消息处理,利用faststream 方便的消息处理我们开发起来很方便
@broker.subscriber("response")
async def msgv2(msg: Any):
    print("response",msg)
if  __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8001)
  • job 处理
    入队, 为了方便都使用了字符串,worker 具体执行的时候会自动进行模块方法的加载
result = q.enqueue(infos.get("module"),**infos,on_success="callback.report_success")
  • callback 定义
import json 
def report_success(job, connection, result, *args, **kwargs):
    print("job success",job.id,job.kwargs,result,args,kwargs)
    info = {
        "data": {
            "name":"dalong",
            "age":11,
            "job_id":job.id
        }
    }
    # 此处使用json 格式,因为faststream默认的消息格式就是json的,我们只需要返回包含job id 信息的json 内容就可以了,实际faststream 订阅装饰器方法会基于job id 进行数据处理
    connection.publish('response', json.dumps(info))

说明

因为redis 的发布订阅并不是很可靠的服务,如果我们比较的时候服务不稳定或者异常了,可能会有不正常的问题,实际上基于stream 模式或者按需基于job api 查询也是可能需要的,属于一种灾备能力(补偿机制)

参考资料

https://python-rq.org/
https://faststream.airt.ai/latest/redis/

posted on   荣锋亮  阅读(19)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2023-10-07 使用jprofiler 14 查看dremio 的grpc 调用
2023-10-07 python 3.12.0 perf 试用
2023-10-07 maestro studio 简化编写测试worflow 的工具
2023-10-07 maestro ios 简单试用
2023-10-07 maestro 移动ui 自动化测试框架
2023-10-07 dbt 数据可观测性相关的一些扩展包
2022-10-07 openmetadata 系统技术栈学习

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示