Comment utiliser la file d'attente de messages pour le traitement des tâches asynchrones dans FastAPI

WBOY
Libérer: 2023-07-30 21:21:13
original
2386 Les gens l'ont consulté

Comment utiliser la file d'attente de messages pour le traitement des tâches asynchrones dans FastAPI

Introduction :
Dans les applications Web, il est souvent constaté que des tâches fastidieuses doivent être traitées, telles que l'envoi d'e-mails, la génération de rapports, etc. Si ces tâches sont placées dans un processus requête-réponse synchrone, les utilisateurs devront attendre longtemps, ce qui réduira l'expérience utilisateur et la vitesse de réponse du serveur. Afin de résoudre ce problème, nous pouvons utiliser la file d'attente de messages pour le traitement des tâches asynchrones. Cet article explique comment utiliser les files d'attente de messages dans le framework FastAPI pour traiter des tâches asynchrones et fournit des exemples de code correspondants.

1. Qu'est-ce qu'une file d'attente de messages ?
La file d'attente de messages est un mécanisme de communication asynchrone entre les composants de l'application. Il permet aux expéditeurs d'envoyer des messages vers une file d'attente et aux destinataires d'obtenir et de traiter ces messages à partir de la file d'attente. L'avantage de la file d'attente de messages est que l'expéditeur et le destinataire sont découplés. L'expéditeur n'a pas besoin d'attendre que le destinataire termine le traitement avant de continuer à effectuer d'autres tâches, améliorant ainsi les performances de débit et de concurrence du système.

2. Choisissez un service de file d'attente de messages approprié
Avant d'utiliser la file d'attente de messages, nous devons choisir un service de file d'attente de messages approprié. Actuellement, les services de file d'attente de messages les plus couramment utilisés incluent RabbitMQ, Kafka, ActiveMQ, etc. Ces services de file d'attente de messages offrent des fonctions riches et des garanties de fiabilité, et nous pouvons choisir le service approprié en fonction des besoins réels.

3. Utilisation de la file d'attente de messages dans FastAPI
Pour utiliser la file d'attente de messages dans FastAPI, nous devons d'abord installer la bibliothèque client de file d'attente de messages correspondante. En prenant RabbitMQ comme exemple, vous pouvez l'installer via la commande pip install aio-pika. Une fois l'installation terminée, nous pouvons introduire les dépendances et modules correspondants dans le fichier principal de FastAPI. pip install aio-pika进行安装。安装完成后,我们可以在FastAPI的主文件中引入相应的依赖项和模块。

from fastapi import FastAPI
from fastapi import BackgroundTasks
from aio_pika import connect, IncomingMessage
Copier après la connexion

接下来,我们需要配置消息队列的连接信息,并编写处理消息的函数。

AMQP_URL = "amqp://guest:guest@localhost/"
QUEUE_NAME = "task_queue"

async def process_message(message: IncomingMessage):
    # 在这里编写异步任务的处理逻辑
    # 例如发送邮件、生成报表等
    print(f"Received message: {message.body}")
    # 这里可以根据实际情况进行任务处理
    # ...

    message.ack()
Copier après la connexion

然后,我们需要在FastAPI应用程序中定义一个接口,用来接收需要进行异步处理的任务。

app = FastAPI()

@app.post("/task")
async def handle_task(request: dict, background_tasks: BackgroundTasks):
    connection = await connect(AMQP_URL)
    channel = await connection.channel()
    queue = await channel.declare_queue(QUEUE_NAME)

    # 发送任务给消息队列
    await queue.publish(
        body=str(request).encode(),
        routing_key=QUEUE_NAME
    )

    connection.close()

    return {"message": "Task submitted successfully"}
Copier après la connexion

上述代码定义了一个POST接口/task

async def listen_to_queue():
    connection = await connect(AMQP_URL)
    channel = await connection.channel()
    queue = await channel.declare_queue(QUEUE_NAME)

    # 持续监听消息队列
    async with queue.iterator() as queue_iterator:
        async for message in queue_iterator:
            async with message.process():
                await process_message(message)
Copier après la connexion

Ensuite, nous devons configurer les informations de connexion de la file d'attente des messages et écrire une fonction pour traiter le message.

app = FastAPI()

@app.on_event("startup")
async def startup_event():
    # 启动消息队列监听
    await listen_to_queue()
Copier après la connexion
Ensuite, nous devons définir une interface dans l'application FastAPI pour recevoir les tâches qui nécessitent un traitement asynchrone.

rrreee

Le code ci-dessus définit une interface POST /task Lorsqu'une demande est reçue, la tâche est transmise à la file d'attente des messages pour un traitement asynchrone et un message réussi est renvoyé une fois le traitement terminé.

Enfin, nous devons écrire une fonction asynchrone pour écouter la file d'attente des messages et gérer les tâches asynchrones.

rrreee
A l'entrée de l'application FastAPI, nous devons démarrer une fonction asynchrone pour écouter la file d'attente des messages.

rrreee

À ce stade, nous avons terminé la configuration et le codage de l'utilisation des files d'attente de messages pour le traitement des tâches asynchrones dans FastAPI.

Conclusion :

En utilisant les files d'attente de messages, nous pouvons séparer les tâches fastidieuses du processus de synchronisation et améliorer les performances des applications et la vitesse de réponse. Cet article décrit comment configurer et utiliser les files d'attente de messages dans FastAPI et fournit des exemples de code correspondants. J'espère que cela vous sera utile lors du développement du traitement des tâches asynchrones.

Références : 🎜[1] https://fastapi.tiangolo.com/🎜[2] https://docs.aio-pika.readthedocs.io/🎜🎜(Remarque : les exemples de code ci-dessus sont à titre de référence uniquement, réel Il doit être ajusté en fonction de la situation spécifique)🎜.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!