2016-03-29 16 views
0

Ich versuche, Scheduler in MassTransit State Machine Saga ohne Angabe der Scheduler-Service-Adresse direkt zu verwenden.Saga-Planung ohne Angabe der Scheduler-Adresse in MassTransit

Ich benutze UseMessageScheduler in der Buskonfiguration und es funktioniert gut, da ich context.Schedule von innerhalb meiner Verbraucher tun kann.

Allerdings funktioniert es nicht in Sagas. Wenn ich versuche, .Schedule zu tun, ich diesen Fehler:

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

ich den MT-Code überprüft, und ich sehe dies:

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"); 

So gibt es tatsächlich einen Zweig, der normalerweise die Scheduler-Adresse erhalten soll von der Konfiguration, aber warum funktioniert es nicht?

Antwort

0

Um sicherzustellen, dass Sie den Scheduler korrekt konfigurieren, sollte der Anruf an UseMessageScheduler auf dem Haupt-Buskonfigurator platziert werden, damit alle Endpunkte darauf zugreifen können. Wenn der Scheduler Endpunkt im gleichen Bus-Instanz konfiguriert ist, sollte es in etwa so aussehen:

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

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

Beachten Sie, dass die Endpunkt-Adresse vom Endpunkt empfangen gezogen wird, und dass der Scheduler auf dem Haupt-Konfigurator konfiguriert. Wenn die Adresse des Schedulers aus der Konfiguration stammt, sollte der URI als Adresse angegeben werden.

+0

Dies ist genau das, was ich in meinem Code habe und ich habe einen Fehler, dass die Planung Service-Adresse nicht angegeben ist. Vielleicht habe ich einen dummen Fehler, werde es überprüfen. –