Microsoft Serviço Inter-Comunicação Problema
-
20-08-2019 - |
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?
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.