2009-08-31 6 views
7

Ich untersuche das Konzept des Einreihens für Web-Anwendungen (d. H. Einige Jobtypen in eine Warteschlange zur Vervollständigung durch einen separaten Mitarbeiter, anstatt im Webanforderungszyklus abgeschlossen zu werden).Warteschlangenlösungen für ASP.NET MVC

Ich würde gerne wissen, ob es dafür gute Lösungen gibt, die in einer ASP.NET MVC-Umgebung verwendet werden können.

Hat jemand irgendwelche (gute oder schlechte) Erfahrungen gemacht?

Vielen Dank!

UPDATE:

Nur um zu klären, ich spreche nicht über eingehende Anfragen Warteschlangen. Ich werde versuchen zu zeigen, was ich meine ...

1) Standardsituation:

  • Antrag Browser
  • Server-Verarbeitung beginnt
  • Lange Job beginnt
  • Langer Job beendet
  • Server Verarbeitung beendet
  • Antwort auf Browser zurückgegeben

2) Was in Ich suche nach:

  • Requsest von Browser
  • Server-Verarbeitung
  • Lange Job platziert beginnt in Warteschlange
  • Server Verarbeitung beendete
  • Antwort auf Browser zurückgegeben

Und in einem anderen Prozess (möglicherweise nachdem die Antwort gesendet wurde):

  • Langer Job aus der Warteschlange genommen
  • Langer Job beginnt
  • Langen Job Fertig

In der ersten Instanz hat der Benutzer waite d eine lange Zeit für Server resoponse, in der Sekunde war es schnell.

Natürlich gibt es bestimmte Arten von Jobs, die dafür geeignet wären, einige würden das nicht sein.

UPDATE2:

Der Kunde muss nicht sofort mit den Ergebnissen der langen Arbeit aktualisiert werden.Die Änderungen würden sich nur dann in der Anwendung zeigen, wenn der Benutzer zufällig eine Seite aktualisiert (nachdem der Job natürlich abgeschlossen wurde).

Denken Sie an einige der Dinge, die im Stapelüberlauf passieren - sie werden nicht sofort in jedem Teil der Anwendung aktualisiert, aber das passiert ziemlich schnell - ich vermute, einige dieser Aufträge werden in die Warteschlange eingereiht.

+0

Warteschlange wird von IIS durchgeführt. Jede Anfrage wird in eine Warteschlange gestellt, die von Worker-Prozessen verarbeitet wird. Die Wartung von Arbeitsprozessen und die Bearbeitung von Anfragen/Antworten werden von IIS erledigt. Warum einen zweiten Warteschlangenmechanismus implementieren? – Christian13467

+1

@ Christian13467: Ich spreche über ein anderes Konzept - siehe Erklärung in Update. – UpTheCreek

Antwort

5

Beitrag der Auftragsdaten in einem MSMQ queue und einem Windows-Dienst-Prozess in der Warteschlange die Elemente hat. Oder lassen Sie die Webanforderung einen Prozess erstellen, der die Elemente in der Warteschlange verarbeitet.

+0

Dies ist ein wenig niedriger als ich dachte, aber vielleicht sehe ich es falsch an - ich habe keine MSMQ-Fähigkeiten, aber ich werde mich darum kümmern - danke. – UpTheCreek

0

denke ich, Chrisitan Kommentar Ihre Antwort sein könnte, aber wenn man bedenkt, weiß ich nicht viel über IIS und mit ihm Schlange stehen, wäre meine Lösung sein:

eine asynchrone Anforderung machen und die Auftragsdaten in der Datenbank laden. Dann haben Sie einen Job, um die Datenbank zu durchlaufen und die Jobdetails zu verarbeiten. Ich mache das für eine meiner Seiten. Vielleicht nicht die beste Lösung da draußen, aber es macht die Arbeit erledigt.

EDIT

Meine Antwort könnte noch funktionieren, aber Sie müssen einige Polling-Mechanismus auf dem Client haben kontinuierlich die Datenbank zu überprüfen, um zu sehen, ob das Job des Benutzers erfolgt, dann die Daten greifen Sie benötigen.

+1

Nein, Christians Kommentar ist nicht meine Antwort;) Ich habe die 'rollen Sie Ihre eigenen mit der DB' Route, aber ich bin auf der Suche nach etwas ein wenig mehr Rebound und für den Zweck gebaut. Ich möchte das Rad nicht neu erfinden (meins wäre wahrscheinlich nicht perfekt rund;) – UpTheCreek

+0

Nur zur Verdeutlichung Neubearbeitung - der Client müsste nicht aktualisiert werden, was die Ergebnisse des Jobs angeht, so dass keine Abfrage erforderlich wäre. – UpTheCreek

2

Sie könnten prüfen, ob Sie einen ESB verwenden. Ich habe mit MassTransit gespielt: http://code.google.com/p/masstransit/ - die Dokumentation ist (oder war zumindest) ein wenig spärlich, aber es ist einfach zu implementieren.

Darüber hinaus entwickle ich Apps für den Betrieb auf Amazon EC2 und liebe ihren AmazonSQS Service.

Danke,

Hal

+0

Ich werde Mass Transit überprüfen - ich merke, dass es auf MSMQ gebaut ist. Ein Äquivalent von etwas wie Amazon SQS ist wahrscheinlich, was ich suche - Danke. – UpTheCreek

3

The Rhino Service Bus ist eine weitere Lösung, die für Sie arbeiten kann:
http://ayende.com/Blog/archive/2008/12/17/rhino-service-bus.aspx

+0

Danke - Ich werde es überprüfen. Ich habe es genossen, Ayendes Beiträge zu anderen Themen in der Vergangenheit zu lesen :) Ist das aber bereit für die Produktion? – UpTheCreek

+0

Ich persönlich habe es nie in der Produktion verwendet, aber ich kenne Leute, die es in der Produktion benutzt haben. –

0

haben Sie MSMQ in Betracht gezogen? Es gibt nichts, was Sie davon abhält, das in MVC zu verwenden, und es ist ziemlich einfach, damit anzufangen.

1

Ich habe dieses Muster implementiert, indem der Webserver einen WCF-Dienst asynchron aufruft. Die VS-Assistenten generieren Async-Proxies für Sie, wenn Sie einen WCF-Dienst konsumieren. Wenn Sie für die Anforderung an den Dienst eine Zustellung garantiert haben müssen, können Sie MSMQ als Transportschicht für den WCF-Dienst verwenden.