2012-03-27 2 views
0

NSB의 동일한 버전에서 서버 이동을 시도하지만 다른 상자로 이동하려고합니다.Nservicebus는 다른 상자로 시간 초과 메시지를 이동합니다.

일부 시간 초과 메시지를 이동해야합니다. 시간 초과 메시지에는 응답 주소 (끝 점이 돌아가야 함)가 있습니다.이 메시지를 이동하는 가장 좋은 방법은 무엇입니까? 내가 본 옵션 몇 가지

1) 큐 탐색기를 사용하여 가져오고 수동으로 응답을 편집하십시오. 타임 아웃 메시지가 100 개 이상 있으면 처리 할 수 ​​없습니다. 나는이 작품을 확인했다.

2) 안드레아스의 최신 타임 아웃 메시지에서 (2.6에서 3.0으로) 몇 가지 코드를 사용해 보았습니다. 기본형 데시 라이저가 변경된 것처럼 보입니다. 나는 신체를 읽을 때 "루트 요소가 없습니다"라는 메시지를 받는다. 나는 그것을 TimeoutData와 Timeoutmessage 모두에 대해 비 직렬화 해 보았습니다.

3) TimeoutMessage를 수신 대기하고 mutator를 사용하여 대상 엔드 포인트로 헤더를 변경하는 엔드 포인트를 설정했지만 이것이 작동하는 것처럼 보이지만 timeoutmessages는 처리 된 후에 대기열에서 제거되지 않습니다.

그래서 저는 1로 고정되어 있고 그 주위에 자동화 된 프로세스가 필요합니다. 생각?

답변

0

안드레아스, 감사합니다. 나는 제 3의 해결책으로 돌아가서 일했습니다. 나는 timeoutmessage를 듣고 DestinationOverride를 사용하여 새 주소로 변경하고 버스를 보냅니다. 타임 아웃 엔드 포인트로 보내십시오.

대기열에서 시간 초과 메시지를 제거하려면 DonotCOntinueDispatchingCUrrentMessageToHandlers를 추가해야했습니다.

이 내 코드는

public void Handle(TimeoutMessage message) 
    { 

     DestinationOverride.CurrentDestination = ConfigurationManager.AppSettings["ResponseQueue"]; 

     var header = message.GetHeader("CorrId"); 

     bus.Send<TimeoutMessage>(ConfigurationManager.AppSettings["OutputQueue"], tm => 
      { 
       tm.ClearTimeout = false; //always false since we don't store the "clear" requests 
       tm.Expires = message.Expires; 
       tm.SagaId = message.SagaId; 
       tm.State = message.State; 
       tm.SetHeader("CorrId",header); 
      }); 

     bus.DoNotContinueDispatchingCurrentMessageToHandlers(); 

    } 

감사 모습입니다.

0

가장 좋은 방법은 기존의 TimeoutMigrator에게

https://github.com/NServiceBus/NServiceBus/tree/master/src/tools/migration/TimeoutMigrator

을 수정하고 반사판에서 현재 TimeoutData이나 저장 큐의 내용을보고하여 살펴보고 아마.

그런 다음 현재의 스키마와 일치하는 Migrator를에 TimeoutData 클래스를 수정 응답에 대한

https://github.com/NServiceBus/NServiceBus/blob/master/src/tools/migration/TimeoutMigrator/TimeoutData.cs