如何快速创建一个拥有异步任务队列集群的 REST API

本文介绍了如何利用docker-compose、FastAPI和rq快速创建一个包含异步任务队列的REST API集群。通过创建Python镜像、编写Dockerfile和docker-compose.yml文件,实现FastAPI应用、Redis服务以及多个worker服务的部署,展示了如何扩展后端执行任务的节点。
摘要由CSDN通过智能技术生成

异步任务是 Web 后端开发中最常见的需求,非常适合多任务、高并发的场景。本文分享如何使用 docker-compose、FastAPI、rq 来快速创建一个包含异步任务队列集群的 REST API,后端执行任务的节点可以随意扩展。

系统的架构图:

349ca9701543a43d5168df5b5e197921.png

上图中的每一个方框都可以理解为一个服务器。

用户请求 api, api 将任务放入 redis 队列,worker 自动去 redis 队列取出任务并执行,worker 节点可以任意水平扩展。

接下来,我们来实现这一架构的 demo,你可以看到 docker 的强大和方便之处。

1、先创建一个虚拟环境,安装依赖

依赖 fastapi,redis,rq 库,安装后生成一个 requirements.txt 文件

mkdir myproject
python3 -m venv env
source env/bin/activate
pip install rq
pip install fastapi
pip install redis
pip freeze > requirements.txt

2、编码实现 REST API、Worker

REST 是一种风格,这里不是重点,我们使用 FastAPI 来快速创建一个接口,新建一个 api.py 的文件,内容如下:

from fastapi import FastAPI
from redis import Redis
from rq import Queue
from worker import send_captcha
app = FastAPI()

# 需要注意,这里的 host 是主机名,在 docker 中就是服务名,后面的 docker-compose.ymal 中的服务名称也要是这个
redis_conn = Redis(host='myproj_redis', port=6379, db=0)

# 定义一个队列,名称是 my_queue
q = Queue('my_queue', connection=redis_conn)

@app.get('/hello')
def hello():
    """Test endpoint"""
    return {&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值