Tempo limite do método MSMQ Receive ()

Minha pergunta original de um tempo atrás éLeitura lenta de fila do MSMQNo entanto, eu tenho avançado com isso e agora acho que conheço o problema um pouco mais claro.

Meu código (na verdade, parte de uma biblioteca de código aberto que estou usando) se parece com isso:

queue.Receive(TimeSpan.FromSeconds(10), MessageQueueTransactionType.Automatic);

Qual é usar oMessaging.MessageQueue.Receive função e fila é um MessageQueue. O problema é o seguinte.

A linha de código acima será chamada com o tempo limite especificado (10 segundos). oReceive(...) function é uma função de bloqueio e deve ser bloqueada até que uma mensagem chegue na fila em que ela retornará. Se nenhuma mensagem for recebida antes do tempo limite ser atingido, ela retornará no tempo limite. Se uma mensagem estiver na fila quando a função for chamada, ela retornará essa mensagem imediatamente.

No entanto, o que está acontecendo é oReceive(...) A função está sendo chamada, visto que não há mensagem na fila e, portanto, aguardando a chegada de uma nova mensagem. Quando uma nova mensagem chega (antes do tempo limite), ela não está detectando essa nova mensagem e continua aguardando. O tempo limite é finalmente atingido, ponto em que o código continua e chamaReceive(...) novamente, onde ele pega a mensagem e a processa.

Agora, esse problema ocorre apenas após alguns dias / semanas. Eu posso fazer isso funcionar normalmente, excluindo e recriando a fila. Isso acontece em computadores diferentes e filas diferentes. Então, parece que algo está se acumulando, até que, em algum momento, a capacidade de disparo / notificação é quebrada.Receive(...) usos da função.

Eu verifiquei um monte de coisas diferentes, e tudo parece normal e não é diferente de uma fila que está funcionando normalmente. Há muito espaço em disco (13gig livre) e RAM (cerca de 350MB livre de 1GB do que eu posso dizer). Verifiquei as entradas do Registro, que parecem todas iguais às outras filas, e o monitor de desempenho não mostra nada fora do normal. Eu também executei a ferramenta TMQ e não consigo ver nada de errado nisso.

Eu estou usando o Windows XP em todas as máquinas e todos eles têm o service pack 3 instalado. Eu não estou enviando uma grande quantidade de mensagens para as filas, no máximo, seria 1 a cada 2 segundos, mas geralmente muito menos freqüente do que isso. As mensagens também são pequenas e nem de longe o limite de 4MB.

A única coisa que acabei de notar é que os arquivos p0000001.mq e r0000067.mq em C: \ WINDOWS \ system32 \ msmq \ storage são ambos 4.096KB, mas eles são desse tamanho em outros computadores que também não estão enfrentando o problema. O problema não acontece com todas as filas do computador de uma só vez, pois eu posso recriar uma fila de problemas no computador e as outras filas ainda enfrentam o problema.

Eu não sou muito experiente com o MSMQ, então se você postar coisas possíveis para checar, por favor, você pode explicar como checá-las ou onde eu posso encontrar mais detalhes sobre o que você está falando.

Atualmente a situação é:

ComputerA - 4 filas normaisComputadorB - 2 filas com problema, 1 fila normalComputerC - 2 filas com problemaComputadorD - 1 fila normalComputerE - 2 filas normais

Então eu tenho um grande número de computadores / filas para comparar e testar.

questionAnswers(4)

yourAnswerToTheQuestion