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?

Foi útil?

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:

http://msdn.microsoft.com/en-us/library/ms978430.aspx

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.

  1. Processar A envolve algo na fila 1

  2. 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.

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