Pergunta

Eu quero construir uma aplicação Azure que tem dois papéis de trabalho e papéis web NÃO. Quando os papéis de trabalho iniciar pela primeira vez eu quero somente um dos papéis para fazer o seguinte uma única vez:

  • Faça o download e analisar um arquivo mestre, em seguida, além de enfileirar vários "filho" tarefas com base na conteúdo do arquivo mestre
  • Enqueue um único download do arquivo mestre tarefa "criança" para executar no dia seguinte

Cada uma das tarefas "criança", então, ser feito por ambos os trabalhadores até que a fila de tarefas estava exausto. Pense em toda a coisas como "aprontar a bomba"

Este tipo de coisa é realmente fácil se eu adicionar a primeira tarefa "mestre" manualmente em uma fila chamando um papel web, mas parece ser realmente difícil de fazer em um modo de auto-start.

Qualquer ajuda neste sentido seria muito apreciada!

Graças .....

Foi útil?

Solução

Uma possibilidade: em vez de chamar uma função Web, basta carregar a fila diretamente. (Parece que este é o tipo de aplicação que você vai querer girar automaticamente até fazer algum trabalho e, em seguida, fechar de novo ... Se você é automatizar isso, deve ser trivial para também carregamento automatizar a fila.)

A (talvez) melhor opção: Use algum tipo de mecanismo de bloqueio para certificar-se apenas uma instância trabalhador faz o trabalho de inicialização. Uma maneira de fazer isso é tentar criar a fila (ou uma bolha, ou uma entidade em uma tabela). Se ele já existe, então a outra instância está a lidar com a inicialização. Se a criar bem-sucedido, então é trabalho dessa instância.

Note que é sempre melhor usar um contrato de arrendamento de um bloqueio, no caso da instância que está fazendo a inicialização falhar. Considere o uso de um tempo limite (por exemplo, armazenar uma data e hora em armazenamento de tabela ou nos metadados da gota ou em nome da fila ...).

Outras dicas

Nós fizemos fim-up com exatamente o mesmo tipo de problema, é por isso que introduziu um O / C mapeador (objecto de nuvem). Basicamente, você quer introduzir dois tipos de serviços em nuvem:

  1. QueueService que as mensagens consome sempre que disponível.
  2. ScheduledService que as operações de gatilhos em uma base programada.

Então, como outros sugeriram, na nuvem, você realmente prefere usando lease s em vez de bloqueios, de modo a evitar a sua aplicação em nuvem para acabar congelado para sempre devido a um hardware temporária (ou infra-estrutura ) questão.

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