2016-07-21 6 views
0

NServiceBus 스케줄러를 사용하는 동안 정의 된 위임을 트리거하는 데 실패했습니다. 아래 링크에서 EndpointScheduler 클래스를 설정하기 위해 설명서를 사용했습니다. 타임 아웃 큐 대응NServiceBus 5.2.14 - 스케줄러가 위임을 트리거하지 못함

종점 생성하고 메시지가 성공적으로 큐에 들어간다. 실행 중에 오류는 발생하지 않지만 스케줄러는 대리인을 트리거하지 않습니다. 현재 NServiceBus 5.2.14를 사용하고 있습니다. 유사한 테스트는 NServiceBus 3.2.7을 사용하여 작동합니다. 스케줄러가 대리인을 트리거하지 않는 이유는 무엇입니까?

http://docs.particular.net/nservicebus/scheduling/

public class EndpointScheduler : IWantToRunWhenBusStartsAndStops, ILoggable 
{ 
    public EndpointScheduler(Schedule schedule) 
    { 
     this.schedule = schedule; 
    } 
    public void Start() 
    { 
     schedule.Every(
      TimeSpan.FromMinutes(1), 
      "Test", 
      () => 
      { 
       Debug.WriteLine("I'm testing the scheduler"); 
      } 
     ); 
    }   
    public void Stop() 
    { 
    } 
} 
+1

안타깝게도 My Machine ™에서만 작동합니다. Debug.WriteLine은 콘솔에 출력하지 않지만 Visual Studio 출력 창에 표시됩니다. Console.WriteLine은 콘솔에서 작동합니다. 또한 작업 전후에 INFO 메시지가 기록되어 중단 점에 도달 할 수 있습니다. 나는 당신의 예제가 private'schedule' var을 놓치고 있다고 가정한다. 그렇지 않으면 컴파일되지 않을 것이다. NSB가 아닌 ILoggable은 무엇입니까? 그게 그 일과 관련이 있을까요? 그렇지 않으면, 엔드 포인트 구성 코드를 표시하십시오. TimeoutManager 및 TimeoutManagerBasedDeferral 기능이 활성화되어 있는지 확인하십시오. –

+0

@DavidBoike 이것은 완전히 나를 일으켰습니다. 내 EndpointConfig에이 구성이 있습니다. DisableFeature (); 내 실수가 제거되었습니다. 이것 좀 봐 주셔서 감사합니다! – Pietro

답변

1

덕분에 몇 가지 잠재적 인 설치 문제를 지적 @DavidBoike합니다.

엔드 포인트 구성을 포함 : 그것은 내가 직면 한 문제를 해결 제거

configuration.DisableFeature<TimeoutManager>() 

.

그 이유는 스케줄러가 TimeoutManager에 의존한다는 것이다. 그것은 (TimeoutManager를 사용하여) 나중에 처리 될 메시지를 연기함으로써 작동하고, 그 메시지가 수신 될 때, 델리게이트가 호출됩니다. TimeoutManager를 활성화하지 않으면 작동하지 않습니다.

관련 문제