Pergunta

Atualmente, estou construindo serviços de duas janelas:

  • A primeira leva mensagens a partir de uma conexão de internet e insere-los em um banco de dados. Isto é projetado para ser rápido e estável e não fazer qualquer outro processamento

  • O segundo executa um processo de lote com quaisquer novas mensagens que chegaram desde que última execução.

Eu estou tentando pensar em uma maneira para que o segundo serviço será executado apenas seu processo batch quando novas mensagens estão prontas para serem processados ??e se o segundo erros de serviço o primeiro serviço vai continuar e vice-versa. No momento em que ele usa um loop a cada 5 segundos.

Atualmente, estou pensando em usar uma fila de mensagens, onde o primeiro serviço escreve uma mensagem somente se a fila está vazia, eo segundo serviço será ver se a fila contém todas as mensagens, se não entrar em uma espera assíncrona até que uma mensagem chega e, em seguida, remover a mensagem e correr. Portanto, usar a fila não realmente como uma fila, mas como um interruptor binário que quando é alterações de estado provoca um evento a ser acionado para o segundo serviço.

Eu presumo que há uma maneira melhor de fazer isso que eu não encontrei alguém poderia me aponte na direção certa?

Foi útil?

Solução

Na verdade, seu caminho é EXATAMENTE como eu iria implementar esta para estes resultados. Com MSMQ, você não tem que verificar para ver se você tem uma mensagem escrita para a fila, o primeiro serviço apenas escreve para a fila, e o segundo serviço apenas lê-lo para processá-lo (quando ele está ativo).

A beleza de usar MSMQ é que um ou outro serviço pode ser baixo, mas o filas será para cima, para que possa continuar o processamento.

Outras dicas

Parece-me como se para este caso tudo que você precisa é um processador de mensagens. As primeiras lojas de serviços na base de dados e, em seguida, envia um "trabalho a fazer" mensagem. O outro apenas aguarda mensagens de entrada.

MSMQ é um peso pesado pouco por algo tão simples. Em seguida, novamente você pode simplesmente usar MSMQ e se livrar do que a DB inteiramente demasiado. que seria a maneira de fazê-lo.

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