2016-03-29 10 views
0

Я пытаюсь использовать планировщик в саж-машине состояния MassTransit, не указав непосредственно адрес службы планировщика.Saga scheduling без указания адреса планировщика в MassTransit

Я использую UseMessageScheduler в конфигурации шины, и он отлично работает, так как я могу сделать context.Schedule внутри моих потребителей.

Однако, это не работает в сагах. Когда я пытаюсь сделать .Schedule, я получаю эту ошибку:

A request timeout was specified but no message scheduler was specified or available

я проверил код МТ, и я вижу это:

MessageSchedulerContext schedulerContext; 
if (_request.Settings.SchedulingServiceAddress != null) 
{ 
    ISendEndpoint scheduleEndpoint = await consumeContext.GetSendEndpoint(_request.Settings.SchedulingServiceAddress).ConfigureAwait(false); 

    await scheduleEndpoint.ScheduleSend(consumeContext.ReceiveContext.InputAddress, expirationTime, message).ConfigureAwait(false); 
} 
else if (consumeContext.TryGetPayload(out schedulerContext)) 
    await schedulerContext.ScheduleSend(message, expirationTime, Pipe.Empty<SendContext>()).ConfigureAwait(false); 
else 
    throw new ConfigurationException("A request timeout was specified but no message scheduler was specified or available"); 

Таким образом, есть на самом деле ветвь, как правило, получить адрес планировщика из конфигурации, но почему это не работает?

ответ

0

Итак, чтобы правильно настроить планировщик, вызов UseMessageScheduler должен быть помещен в конфигуратор основной шины, чтобы все конечные точки имели к нему доступ. Если планировщик конечная точка настроена в пределах одного экземпляра шины, он должен выглядеть примерно так:

configurator.ReceiveEndpoint("quartz", e => 
{ 
    configurator.UseMessageScheduler(e.InputAddress); 

    e.Consumer(() => new ScheduleMessageConsumer(scheduler)); 
    e.Consumer(() => new CancelScheduledMessageConsumer(scheduler)); 
}); 

Обратите внимание, что адрес конечной точки вытягиваются из приемной конечной точки, и что планировщик настроен на главной шине конфигураторе. Если адрес планировщика находится в конфигурации, URI следует указывать в качестве адреса.

+0

Это именно то, что у меня есть в моем коде, и я получил сообщение об ошибке, указывающей, что адрес службы не указан. Может быть, у меня есть глупая ошибка, дважды проверьте. –