0
votes

Traitement des demandes en arrière-plan

J'écris une API de repos avec ASP.NET CORE et Microsoft SQL Server. Une de mes exigences est que les clients seront POST certaines données à cette API et l'API devra transformer / traiter les données d'une manière d'une manière avant d'être utilisée ou lue. S'avère que ce traitement est coûteux. Je pense donc à le faire de manière asynchrone en arrière-plan sans bloquer la requête Post . Je envisage de faire le traitement:

  • dans un travail SQL planifié
  • Utilisation d'un service Windows séparé en cours d'exécution dans l'arrière-plan qui se lit à partir de la DB, le traitement et l'écrite. Ce sera plus lent que le travail SQL que je présume, mais le code sera plus lisible.
  • en utilisant hangfire . Jamais utilisé. Je ne sais pas à quel point cela fonctionne bien.

    Quelles sont les meilleures options pour cela? Y a-t-il des meilleures pratiques autour de ce genre de chose?


0 commentaires

3 Réponses :


1
votes

Plaque de chaudière

  • Stockez ces données quelque part (SGBDR, nonSQL, etc.)
  • Répondre à l'utilisateur que ses données ont été programmées pour le traitement
  • Exécutez un collaborateur ou un pool de nœuds de calcul pour le traitement des tâches
  • Stocker le résultat quelque part
  • Avertir le client que la tâche d'arrière-plan est terminée (il peut s'agir simplement d'un point de terminaison GET / jobs / id que le client peut vérifier
  • Afficher ce résultat

Vous pouvez utiliser votre propre démon, processus, script. Si cela ne suffit pas et que vous avez besoin de plus de fonctionnalités, utilisez ce Hangfire qui a l'air solide.


0 commentaires

1
votes

  • Sans serveur (fonction Azure, AWS Lambda)
  • AWS SQS ou Azure Queue + services hébergés docs

2 commentaires

Merci Dmytro. Je vais essayer Hangfire. J'aurais dû mentionner que le cloud n'est pas une option pour moi. Il s’agit strictement d’un déploiement sur site


Vous pouvez utiliser rabbit MQ localement par exemple, ou un autre truc pub-sub dans votre cas. Ainsi, le travailleur et le producteur peuvent être séparés.



0
votes

Une autre option que j'ai trouvée consiste à implémenter IHostedService , une interface intégrée dans ASP.Net Core. Voir cette page pour plus de détails.


0 commentaires