Retirar a Mensagem da Fila apenas se o usuário faz alguma operação
-
21-09-2019 - |
Pergunta
Estamos tendo MVC aplicação que lê os dados a partir do MSMQ.Estamos tentando encontrar uma maneira de ler a mensagem da fila e remover da fila somente se o usuário tiver feito uma operação bem-sucedida na fila.A mensagem deve permanecer na fila até que o usuário completa o processamento, a mensagem não deve estar disponível para qualquer pessoa até que o usuário que está processando o objeto de mensagem tem de terminar a operação.
Existe uma propriedade de um objeto de Mensagem a ser definido como Espreitar o que vai permitir a leitura desta mensagem novamente até que o éter é colocado de volta na fila ou removida da fila?
Não temos certeza se usando o MSMQ é uma boa idéia, neste caso?
Solução
Parece que você precisa usar a sua fila(s) no modo transacional.Em seguida, o cliente pode receber uma mensagem, o processo, e em seguida, confirmar a transação, no ponto em que a mensagem será finalmente será.Enquanto a transação está ativa, no entanto, que outros clientes não verá a mensagem, que será realizada em reserva até que a transação é concluída ou cancelada.
Este artigo do MSDN tem uma boa visão geral dos padrões de uso para um sistema de mensagens confiável com o MSMQ:
Outras dicas
A fila é a ideia certa. Sua abordagem de "Deixe na fila, trancada, mas ainda meio disponível" está errada.
Você pode precisar de várias filas.
Processar A envolve algo na fila 1
Processar B dequees da fila 1 e começa a funcionar.
Se B for bem -sucedido, é isso.
Caso contrário, ele será na fila em outro lugar (talvez a mesma fila, ou talvez a fila 2) para o trabalho de acompanhamento.
Se voltar à fila 1, B encontrará novamente, eventualmente. Se foi para outra fila, outro processo limpa, registro, fixação de erros ou o que for, possivelmente colocando algo de volta na fila 1.
Uma fila não é um banco de dados - não há nada com estado (não "Não olhe para mim, estou sendo processado").
Uma fila é um armazenamento transitório. Alguém escreve, alguém lê, e é isso.
Se você quiser confiabilidade, leia o seguinte: http://msdn.microsoft.com/en-us/library/ms978430.aspx
E isto: http://blogs.msdn.com/shycohen/archive/2006/02/20/535717.aspx
E isto: http://www.request-rosponse.com/blog/permalink,guid,03fb0e40-b446-42b5-ad90-3be9b0260cb5.aspx
A confiabilidade é um recurso da fila, não do seu aplicativo. Você pode fazer uma "leitura recuperável". É uma transação que faz parte da API da fila.