Pergunta

Estou olhando para o conceito de fila para aplicativos da web (ou seja, colocando alguns tipos de trabalho em uma fila para conclusão por um trabalhador separado, em vez de ser concluído no ciclo de solicitação da Web).

Gostaria de saber se existem boas soluções existentes para isso que podem ser utilizadas em um ambiente ASP.NET MVC.

Alguém já teve alguma experiência (boa ou ruim)?

Obrigada!

ATUALIZAR:

Só para esclarecer, não estou falando sobre solicitações de entrada na fila. Vou tentar ilustrar o que quero dizer ...

1) Situação padrão:

  • Solicitação do navegador
  • O processamento do servidor começa
  • O trabalho longo começa
  • Longo trabalho terminado
  • Processamento do servidor terminado
  • Resposta retornada ao navegador

2) O que estou analisando:

  • Requsest do navegador
  • O processamento do servidor começa
  • Trabalho longo colocado na fila
  • Processamento do servidor terminado
  • Resposta retornada ao navegador

E em outro processo (possivelmente após a resposta):

  • Longo emprego tirado da fila
  • O trabalho longo começa
  • Longo trabalho terminado

Em primeira instância, o usuário esperou muito tempo para a resseção do servidor, no segundo, foi rápido.

É claro que existem certos tipos de empregos que seriam apropriados para isso, alguns que não seriam.

Update2:

O cliente não precisa ser atualizado imediatamente com os resultados do trabalho longo. As alterações se mostravam apenas no aplicativo sempre que o usuário atualizava uma página (depois que o trabalho foi concluído, é claro).

Pense em algumas das coisas que acontecem no Stack Overflow - elas não são atualizadas imediatamente em cada parte do aplicativo, mas isso acontece muito rapidamente - suspeito que alguns desses trabalhos estejam sendo filmados.

Foi útil?

Solução

Postar os dados do trabalho em um Fila MSMQ e tenha um processo de serviço do Windows os itens na fila. Ou, deixe a solicitação da Web gerar um processo que processa os itens na fila.

Outras dicas

O barramento de serviço de rinoceronte é outra solução que pode funcionar para você:
http://ayende.com/blog/archive/2008/12/17/rhino-service-bus.aspx

Você pode verificar o uso de um ESB. Eu brinquei com o Masstransit: http://code.google.com/p/masstransit/ - A documentação é (ou pelo menos foi) um pouco escassa, mas é fácil de implementar.

Além disso, desenvolvo aplicativos para executar na Amazon EC2 e absolutamente amo o serviço AmazonSQS.

Obrigado,

Hal

Desde que você mencionou em outro comentário que estava procurando um equivalente ao serviço SQS da Amazon ... Você pode querer procurar no Windows Azure. Eles têm uma API de fila equivalente:
http://msdn.microsoft.com/en-us/library/dd179363.aspx

Eu implementei esse padrão fazendo com que o servidor da web ligue para um serviço WCF de forma assíncrona. Os assistentes VS gerarão proxies assíncronos para você quando você consome um serviço WCF. Se você deve ter entrega garantida na solicitação ao serviço, poderá usar o MSMQ como camada de transporte para o serviço WCF.

Acho que o comentário de Chrisitan pode ser sua resposta, mas considerando que não sei muito sobre o IIS e a fila com ele, minha solução seria:

Faça uma solicitação assíncrona e carregue os detalhes do trabalho no banco de dados. Em seguida, tenha um trabalho para percorrer o banco de dados e processe os detalhes do trabalho. Eu faço isso para um dos meus sites. Pode não ser a melhor solução por aí, mas faz o trabalho.

EDITAR

Minha resposta ainda pode funcionar, mas você precisará ter algum mecanismo de pesquisa do cliente para verificar continuamente o banco de dados para verificar se o trabalho desse usuário está concluído e, em seguida, pegue os dados necessários.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top