我有两条消息,clientChangeMessage(负责创建客户端)和clientContractChangeMEssage(负责客户端的预订详细信息)。现在,在我的数据库中,只有拥有客户合同才能创建客户,反之亦然。在我的本地系统上,一切正常,即如果首先获得客户端更改消息,我将其存储在 saga 中并等待客户端合同消息,当该消息到达时,saga 会执行这两个消息。但是在我的测试机器上,当客户端更改消息出现时,它会存储在 saga 中,但是当客户端合同更改出现时,saga 找不到客户端更改 saga,因此会创建另一个 saga。我已经用我的测试人员尝试过的完全相同的消息进行了尝试,它可以在我的机器上运行,并且无法弄清楚可能出了什么问题。我正在使用乌鸦数据库持久性。(对不起,我想不出为此粘贴任何代码)
ClientSagaState
public class ClientSagaState:IContainSagaData
{
#region NserviceBus
public Guid Id { get; set; }
public string Originator { get; set; }
public string OriginalMessageId { get; set; }
#endregion
public Guid ClientRef { get; set; }
public ClientMessage ClientChangeMessage { get; set; }
public ClientContractChangeMessage ClientContractChange { get; set; }
}
public class ClientSaga:Saga<ClientSagaState>,
IAmStartedByMessages<ClientChangeMessage>,
IAmStartedByMessages<ClientContractChangeMessage>
{
public override void ConfigureHowToFindSaga()
{
ConfigureMapping<ClientChangeMessage>(s => s.ClientRef, m => m.EntityRef);
ConfigureMapping<ClientContractChangeMessage>(s => s.ClientRef, m => m.PrimaryEntityRef);
}
public void Handle(ClientChangeMessage message)
{
if (BusRefTranslator.GetLocalRef(EntityTranslationNames.ClientChange, message.EntityRef.Value) != null)
{
GetHandler<ClientChangeMessage>().Handle(message);
CompleteTheSaga();
return;
}
HandleServiceUserChangeAndDependencies(message);
//MarkAsComplete();
CompleteTheSaga();
}
public void Handle(ClientContractChangeMessage message)
{
var state=this.Data;
//Some handling logic
//Check if client is not in database then store the state
state.ClientContractChange=message;
state.ClientRef =message.PrimaryEntityRef;
//if client is in the data base then
MarkAsComplete();
}
谢谢,