2016-07-21 8 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

Ну, к сожалению, это просто работает на моей машине ™. Debug.WriteLine не выводится на консоль, но появляется в окне вывода Visual Studio. Console.WriteLine работает на консоли. Я также вижу сообщения INFO, зарегистрированные до и после задачи, и может нанести им точку останова. Я предполагаю, что на вашем примере отсутствует частный 'sched' var, иначе он не будет компилироваться. Что такое ILoggable, так как это не от NSB. Может ли это иметь к этому какое-нибудь отношение? В противном случае покажите свой код конфигурации конечной точки. Уверены, что функции TimeoutManager и TimeoutManagerBasedDeferral включены? –

+0

@DavidBoike Это было полностью вызвано мной. Моя EndpointConfig имела эту конфигурацию DisableFeature (); Снятие исправлено с моей ошибкой. Спасибо, что посмотрели на это! – Pietro

ответ

1

Благодаря @DavidBoike за указание несколько возможных проблем настройки.

Конфигурация конечных точек содержала:

configuration.DisableFeature<TimeoutManager>() 

Удаление их исправление проблемы я столкнулся.

Причина этого заключается в том, что планировщик зависит от TimeoutManager. Он работает, откладывая сообщение, которое будет обработано позже (с использованием TimeoutManager), и когда это сообщение будет получено, вызывается делегат. Без активации TimeoutManager это не сработает.