单例 NServiceBus Saga
Singleton NServiceBus Saga
让单个 saga 处理所有消息的正确方法是什么?
我不认为我不能指定一些 message-to-saga
相关性。我可以吗?我相信这会导致 "saga not found" 错误。
一个天真的方法是在 saga 中有一些常量 ID,但这似乎是错误的。
class SomePolicy :
Saga<SomePolicy.State>,
IAmStartedByMessages<SomeEvent>
{
internal class State : ContainSagaData
{
public int Id { get { return 1; } }
}
protected override void ConfigureHowToFindSaga(SagaPropertyMapper<State> mapper)
{
mapper
.ConfigureMapping<SomeEvent>(message => message.MagicConstant)
.ToSaga(saga => saga.Id);
}
public void Handle(SomeEvent message)
{
// Modify the saga state here.
}
}
您可以提供 IFindSagas<T>.Using<M>
的实现,而不是覆盖 ConfigureHowToFindSaga
,它用于从类型 M 的消息中查找类型 T 的传奇。然后始终使用它 return同一个实例。
有关更多详细信息和一些示例,请参阅 Complex Saga Finding Logic。
让单个 saga 处理所有消息的正确方法是什么?
我不认为我不能指定一些 message-to-saga
相关性。我可以吗?我相信这会导致 "saga not found" 错误。
一个天真的方法是在 saga 中有一些常量 ID,但这似乎是错误的。
class SomePolicy :
Saga<SomePolicy.State>,
IAmStartedByMessages<SomeEvent>
{
internal class State : ContainSagaData
{
public int Id { get { return 1; } }
}
protected override void ConfigureHowToFindSaga(SagaPropertyMapper<State> mapper)
{
mapper
.ConfigureMapping<SomeEvent>(message => message.MagicConstant)
.ToSaga(saga => saga.Id);
}
public void Handle(SomeEvent message)
{
// Modify the saga state here.
}
}
您可以提供 IFindSagas<T>.Using<M>
的实现,而不是覆盖 ConfigureHowToFindSaga
,它用于从类型 M 的消息中查找类型 T 的传奇。然后始终使用它 return同一个实例。
有关更多详细信息和一些示例,请参阅 Complex Saga Finding Logic。