2009-08-31 3 views
7

Je m'intéresse au concept de mise en file d'attente pour les applications Web (c'est-à-dire mettre certains travaux en attente dans une file d'attente, plutôt que d'être complétés dans le cycle de requête Web).Solutions de mise en file d'attente pour ASP.NET MVC

Je voudrais savoir s'il existe de bonnes solutions pour cela qui peuvent être utilisées dans un environnement ASP.NET MVC.

Est-ce que quelqu'un a eu des expériences (bonnes ou mauvaises)?

Merci!

MISE À JOUR:

Juste pour clarifier les choses, je ne parle pas de faire la queue des demandes entrantes. Je vais essayer d'illustrer ce que je veux dire ...

1) Situation standard:

  • Demande de navigateur
  • traitement Server démarre
  • emploi de longue commence
  • Long travail terminé
  • traitement du serveur terminé
  • Réponse retourné au navigateur

2) Ce que je suis à la recherche dans:

  • Requsest du navigateur
  • traitement Server démarre
  • emploi à long placé dans file d'attente
  • Serveur traitement terminé
  • Réponse retourné au navigateur

Et dans un autre processus (peut-être après la réponse a été envoyée):

  • travail de longue prise de la file
  • travail de longue commence
  • emploi à long terminé

Dans un premier temps l'utilisateur a waite d longtemps pour la réponse du serveur, dans la seconde, il était rapide.

Bien sûr, il y a certains types d'emplois qui seraient appropriés pour cela, d'autres qui ne le seraient pas.

MAJ2:

Le client ne doit pas être immédiatement mis à jour avec les résultats du travail de longue haleine.Les modifications ne s'afficheront dans l'application que lorsque l'utilisateur aura actualisé une page (après l'achèvement du travail bien sûr). Pensez à certaines choses qui se produisent dans un débordement de pile - elles ne sont pas immédiatement mises à jour dans chaque partie de l'application, mais cela se produit assez rapidement - je pense que certains de ces travaux sont en file d'attente.

+0

La mise en file d'attente est effectuée par IIS. Chaque requête est placée dans une file d'attente qui est traitée par les processus de travail. La maintenance des processus de travail et la gestion des requêtes/réponses sont effectuées par IIS. Pourquoi implémenter un second mécanisme de file d'attente? – Christian13467

+1

@ Christian13467: Je parle d'un concept différent - voir l'explication dans la mise à jour. – UpTheCreek

Répondre

5

Poster les données d'emploi dans un MSMQ queue et un processus de service Windows les éléments de la file d'attente. Ou, laissez la demande web engendrer un processus qui traite les éléments de la file d'attente.

+0

C'est un peu plus bas niveau que je ne le pensais, mais peut-être que je le regarde mal - je n'ai pas de compétences MSMQ, mais je vais y jeter un coup d'oeil - merci. – UpTheCreek

0

Je pense que le commentaire de Chrisitan pourrait être votre réponse, mais étant donné que je ne sais pas beaucoup sur IIS et faire la queue avec elle, ma solution serait:

Faire une demande asynchrone et charger les détails du travail dans la base de données. Ensuite, un travail pour parcourir la base de données et traiter les détails du travail. Je fais cela pour l'un de mes sites. Ce n'est peut-être pas la meilleure solution, mais le travail est fait.

EDIT

Ma réponse pourrait encore travailler, mais vous aurez besoin d'avoir un mécanisme de vote sur le client pour vérifier en permanence la base de données pour voir si on fait le travail de l'utilisateur, puis saisissez les données dont vous avez besoin.

+1

Non, le commentaire de Christian n'est pas ma réponse;) J'ai envisagé de rouler en utilisant la BD, mais je cherche quelque chose d'un peu plus de rebus et construit pour le but. Je ne veux pas réinventer la roue (la mienne ne serait probablement pas parfaitement ronde;) – UpTheCreek

+0

Juste pour clarifier re edit - le client n'aurait pas besoin d'être mis à jour quant aux résultats du travail donc aucune interrogation ne serait nécessaire. – UpTheCreek

2

Vous pouvez vérifier l'utilisation d'un ESB. J'ai joué avec MassTransit: http://code.google.com/p/masstransit/ - la documentation est (ou du moins était) un peu éparse, mais elle est facile à mettre en œuvre.

De plus, je développe des applications pour fonctionner sur Amazon EC2 et j'adore absolument leur service AmazonSQS.

Merci,

Hal

+0

Je vais vérifier Mass Transit - je remarque qu'il est construit sur MSMQ. Un équivalent de somehting comme Amazon SQS est probablement ce que je cherche - Merci. – UpTheCreek

3

Le service Rhino Bus est une autre solution qui peut fonctionner pour vous:
http://ayende.com/Blog/archive/2008/12/17/rhino-service-bus.aspx

+0

Merci - Je vais vérifier. J'ai aimé lire les posts d'Ayende sur d'autres sujets dans le passé :) Est-ce prêt pour la production? – UpTheCreek

+0

Personnellement, je ne l'ai jamais utilisé dans la production, cependant, je connais des gens qui l'ont utilisé dans la production. –

0

avez-vous pensé MSMQ? Il n'y a rien qui vous empêche d'utiliser cela depuis MVC, et c'est assez simple pour commencer.

1

Puisque vous avez mentionné dans un autre commentaire que vous cherchiez un équivalent au service sqs d'amazon ... vous pourriez vouloir regarder dans Windows Azure. Ils ont une file d'attente équivalent api:
http://msdn.microsoft.com/en-us/library/dd179363.aspx

1

J'ai mis en œuvre ce modèle en ayant l'appel de serveur Web un service WCF de manière asynchrone. Les assistants VS génèrent des proxys asynchrones pour vous lorsque vous utilisez un service WCF. Si vous devez avoir une livraison garantie sur la demande au service, vous pouvez utiliser MSMQ comme couche de transport pour le service WCF.

Questions connexes