Domanda

I esaminando il concetto di fare la coda per le applicazioni web (vale a dire mettere alcuni tipi di lavoro in una coda per il completamento di un lavoratore indipendente, piuttosto che in fase di completamento del ciclo di richiesta web).

Vorrei sapere se ci sono delle buone soluzioni esistenti per questo che possono essere utilizzati in un environemnt ASP.NET MVC.

Qualcuno ha avuto esperienze (buono o cattivo)?

Grazie!

UPDATE:

Giusto per chiarire, non sto parlando di fare la coda le richieste in arrivo. Cercherò di illustrare quello che voglio dire ...

1) Situazione standard:

  • Richiesta dal browser
  • elaborazione Server avvia
  • lavoro lungo avvia
  • lavoro lungo finito
  • elaborazione Server finito
  • risposta restituita al browser

2) Quello che sto cercando in:

  • Requsest dal browser
  • elaborazione Server avvia
  • lavoro lungo posto in coda
  • elaborazione Server finito
  • risposta restituita al browser

E in un altro processo (eventualmente dopo la risposta è stata inviata):

  • lavoro lungo tratto da coda
  • lavoro lungo avvia
  • lavoro lungo finito

Nel primo caso l'utente ha atteso a lungo per resoponse del server, nella seconda che è veloce.

Naturalmente ci sono alcuni tipi di posti di lavoro che sarebbero appropriati per questo, alcuni che non sarebbe.

UPDATE2:

Il cliente non deve essere aggiornato immediatamente con i risultati del lungo lavoro. I cambiamenti sarebbero solo si mostrano in applicazione ogni volta che l'utente è accaduto per aggiornare una pagina (dopo che il lavoro aveva completato ovviamente).

Pensate alcune delle cose che accadono in overflow dello stack - non vengono immediatamente aggiornati in ogni parte della domanda, ma questo happends abbastanza rapidamente - Ho il sospetto che alcuni di questi posti di lavoro sono messe in coda.

È stato utile?

Soluzione

Inserisci i dati del lavoro in un MSMQ coda e hanno un Windows Service elaborare gli elementi nella coda. In alternativa, lasciare che la richiesta web spawn un processo che elaborano gli elementi nella coda.

Altri suggerimenti

Il Rhino Service Bus è un'altra soluzione che può funzionare per voi:
http://ayende.com/Blog/archive/ 2008/12 / 17 / rino-service-bus.aspx

Si potrebbe verificare nel usando un ESB. Ho giocato in giro con MassTransit: http://code.google.com/p/masstransit/ - la documentazione è (o almeno era) un po 'scarsa, ma è facile da implementare

.

In aggiunta, ho sviluppare applicazioni per l'esecuzione su Amazon EC2 e assolutamente amano il loro servizio AmazonSQS.

Grazie,

Hal

Dal momento che lei ha citato in un altro commento che stavate cercando un equivalente servizio di Amazon SQS ... si potrebbe desiderare di guardare in Windows Azure. Hanno un api coda equivalente:
http://msdn.microsoft.com/en-us/library/dd179363. aspx

Ho implementato questo modello da avere il web server chiamare un servizio WCF in modo asincrono. I maghi VS genereranno proxy asincroni per voi quando si consuma un servizio WCF. Se è necessario aver garantito la consegna sulla richiesta al servizio, è possibile utilizzare MSMQ come il livello di trasporto per il servizio WCF.

Credo che il commento di Chrisitan potrebbe essere la vostra risposta, ma considerando che non so molto di IIS e in coda con essa, la mia soluzione potrebbe essere:

Fai una richiesta asincrona e caricare i dettagli del processo nel database. Poi avere un lavoro per scorrere il database ed elaborare i dettagli del lavoro. Lo faccio per uno dei miei siti. Potrebbe non essere la soluzione migliore là fuori, ma ottiene il lavoro fatto.

Modifica

La mia risposta potrebbe ancora funzionare, ma è necessario avere qualche meccanismo di polling sul client per controllare continuamente il database per vedere se il lavoro che l'utente è fatto, poi prendete i dati necessari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top