문제

MSMQ에 다음 설치 및 문제가 있습니다. MSMQ와의 이전 경험을 바탕으로 나는 그것이 단순한 것이 뭔가있는 것입니다. 그러나 나는 그것이 무엇인지 모르겠다.

설정

3 개의로드 밸런스 웹 서버가 있습니다 (서버 W1 , w2 w3 ) 및 특정 이벤트를 처리하는 1 개의 서버 / 웹 요청에서 멀리 떨어져있는 데이터 ( p 라고 부를 것인가). 웹 서버의 모든 3 개의 웹 서버는 웹 응용 프로그램 내에서 특정 이벤트가 발생하면 서버 p 에 대한 원격 개인 대기열에 메시지를 보냅니다.이 메시지는 대기열에서 각 메시지를 처리하고 일부를 수행합니다. 작업.

문제

대부분의 경우 - 시간의 추측 95 %에서 모든 것이 잘 실행되지만 때로는 서버 p 은 웹 서버에서 메시지를 수신하지 않습니다. 이것은 w1 , w2 또는 w3 이 그들을 보내지 않거나 p 에 의해받지 못하고 있기 때문입니다. 나는 단지 말할 수 없다. 즉, 웹 응용 프로그램의 사용자에서 일어나는 중요한 이벤트가 없지만 내 로그에 나열된 오류를 찾을 수 없습니다.

세부 사항

여기에 내가 설정하는 데 도움이 될 수있는 모든 세부 사항이 있으며 지금까지 알아 냈던 것을 설명하는 데 도움이 될 수 있습니다 :

  • 서버 p 의 개인 큐는 비 트랜잭션입니다.
  • 개인 대기열에는 Everyone Everyone Everyone 모두에게 사용 권한 설정이 있습니다.
  • 이것은 내가 사용하는 코드 (C #)가 원격 개인 대기열에 메시지를 보내려면 다음과 같습니다.

    var queue = new MessageQueue(@"FormatName:DIRECT=OS:ServerP\PRIVATE$\MyMessageQueue");
    
    var defaultProperties = queue.DefaultPropertiesToSend;
    defaultProperties.AcknowledgeType = AcknowledgeTypes.FullReachQueue | AcknowledgeTypes.FullReceive;
    defaultProperties.Recoverable = true;
    defaultProperties.UseDeadLetterQueue = true;
    defaultProperties.UseJournalQueue = true;
    
    queue.Send(requestData);
    
  • 위의 코드를 사용하여 메시지를 보내는 것은 예외를 던지지 않는 것처럼 보이지 않습니다. 웹 응용 프로그램에서 내 오류 처리기가 잡히고 기록했을 때,

  • w1 , w2 w3 p 의 개인 대기열을 가리키는 w3 에 대한 나가는 대기열이 있습니다. 이 모든 것이 비어 있습니다.
  • w1 , w2 w3 은 "죽은 편지"메시지를 볼 수 없습니다.
  • 켜짐 p 개인 대기열이 비어 있으므로 메시지가 처리됩니다 (데이터베이스에서 확인할 수 있음).
  • p "데드 - 문자"메시지가 없습니다. 저널 메시지가 있지만 최근 날짜 / 시간과 일치하지 않는 것 같습니다.
  • 모든 서버가 Windows Server 2012를 실행 중입니다.

대부분의 시간 메시지는 괜찮아지고 받고 처리하지만, 나에게 가시적 인 패턴이 없으면 때로는 그렇지 않습니다. 누구든지 잘못된 것을보아야 할 수 있습니까? 또는 내가 무슨 일이 일어나고 있는지 알아낼 수있는 방법을 설명하고 설명하는 방법을 설명해 주시겠습니까?

도움이 되었습니까?

해결책

P의 수신자가 어떻게 든 메시지를 잃지 않습니까?대기열이 트랜잭션이 아닌 경우, 어떻게 든 처리가 실패하면 잃어버린 메시지가 하나입니다.

어쨌든, 이것이 실패 할 수있는 많은 원인이 많이 있습니다. 어떤 종류의 로깅이 있습니까 (디버그 / 정보 수준)?

다음은 문제를 추적하는 데 도움이됩니다.

  1. 웹 응용 프로그램에서 이벤트가 생성되면
  2. MSMQ를 통해 웹 앱에서 이벤트를 보내기 전에
  3. 대기열에서 메시지를 가져올 때 수신기에 있습니다.
  4. 이 방법으로 보낸 메시지를 수신 된 메시지 및 처리 된 메시지에 적어도 일치시킬 수 있습니다.

    사이드 메모로서, 원본 컴퓨터와 대상 하나가 아닌 소스 컴퓨터 및 중개 홉에있는 모든 중개 홉에서 그렇게하는 데 사용되는 데드 - 문자 메시지를 확인하십시오.홉이 없으면 웹 서버의 트랜잭션이 아닌 데드백 큐에 릴레이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top