NServicebus Sagas: SagaNot Найдено предупреждение, даже если оно его находит
Я надеюсь, что кто-то может помочь мне с моей проблемой, поскольку я гуглил ее как сумасшедший без результата.
Я пытаюсь реализовать сагу в NServicebus. Метод handle в саге вызывает два разных обработчика через шину, используя метод bus.Send() (см. Код ниже). Затем, когда каждый обработчик завершает свою работу, он отправляет уведомляющее сообщение таким же образом обратно в сагу. Сага проверяет свое состояние и вызывает MarkAsComplete(), когда все шаги сделаны. Я использую одну очередь сообщений и конечную точку для всего общения в этой саге.
Я получаю следующие две предупреждающие строки для каждого обработчика непосредственно перед достижением методов public void Handle(сообщение Notify1DataMessage) и public void Handle(сообщение Notify2DataMessage):
Предупредить: не удалось найти сагу для типа сообщения Notify1Message с идентификатором [GUID]. Собираюсь вызвать SagaNotFoundHandlers.
ПРЕДУПРЕЖДЕНИЕ: NServiceBus.Sagas.SagaPersistenceBehavior: не удалось найти сагу для пространства имен типа сообщения.Notify1Message с идентификатором [GUID]. Собираюсь вызвать SagaNotFoundHandlers.
Что я делаю неправильно? Все работает нормально, в саге он находит методы дескриптора notify, но почему он жалуется?
Соответствующий код:
public class RemovalSaga : Saga<SomeSagaData>,
IAmStartedByMessages<RemoveDataMessage>,
IHandleMessages<Notify1DataMessage>,
IHandleMessages<Notify2DataMessage>
{
// The mapping uses a string property called QueueMessage that is unique
public override void ConfigureHowToFindSaga()
{
ConfigureMapping<RemoveDataMessage>(m => m.QueueMessage).ToSaga(saga => saga.QueueMessage);
ConfigureMapping<Notify1DataMessage>(m => m.QueueMessage).ToSaga(saga => saga.QueueMessage);
ConfigureMapping<Notify2DataMessage>(m => m.QueueMessage).ToSaga(saga => saga.QueueMessage);
}
public void Handle(RemoveDataMessage message)
{
Data.QueueMessage = message.QueueMessage;
//...
var message1 = new Handler1DataMessage
{
QueueMessage = Data.QueueMessage
};
_bus.Send(message1);
var message2 = new Handler2DataMessage
{
QueueMessage = Data.QueueMessage
};
_bus.Send(message2);
}
// The warning fires just before this Handle method is reached.
public void Handle(Notify1DataMessage message)
{
if (!Data.AllStepsDone) return;
MarkAsComplete();
}
// The warning fires just before this Handle method is reached.
public void Handle(Notify2DataMessage message)
{
if (!Data.AllStepsDone) return;
MarkAsComplete();
}
}
//Both handlers have the same relevant code (showing one of them):
public class Handler1 : IHandleMessages<Handler1DataMessage>
//...
public void Handle(Handler1DataMessage message)
{
//...
var notifyMessage = new Notify1DataMessage
{
QueueMessage = message.QueueMessage
};
_bus.Send(notifyMessage);
}
}
//Endpoint configuration:
public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
public void Init()
{
//...
Configure.Features.Enable<Sagas>();
Configure.With()
.LicensePath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "License\\License.xml"))
.NinjectBuilder(kernel)
.UseTransport<Msmq>()
.RavenPersistence()
.RavenSagaPersister()
.UnicastBus()
.LoadMessageHandlers()
.UseRavenTimeoutPersister();
}
}
//SomeSagaData just in case:
public class SomeSagaData : IContainSagaData
{
[Unique]
public virtual string QueueMessage { get; set; }
public virtual Guid Id { get; set; }
public virtual string Originator { get; set; }
public virtual string OriginalMessageId { get; set; }
//...
}