我正在开发一个示例应用程序,以使用NserviceBus测试saga中的超时管理。
我正在努力实现以下目标
当一个传奇开始时,将超时设置为1分钟 在超时发生之前,如果更新到达nessage将超时更新为5分钟 我的代码如下所示
public class OrderSaga : Saga<OrderSagaData>,
IAmStartedByMessages<SampleMessage>,
IHandleMessages<UpdateMessage>
{
public override void ConfigureHowToFindSaga()
{
ConfigureMapping<UpdateMessage>(s => s.PurchaseOrderNumber, m => m.Update);
}
public void Handle(SampleMessage message)
{
this.Data.PurchaseOrderNumber = message.Name;
RequestTimeout(DateTime.Now.AddMinutes(1), message.Name);
}
private void Complete()
{
MarkAsComplete();
}
public override void Timeout(object state)
{
Complete();
}
#region IMessageHandler<UpdateMessage> Members
public void Handle(UpdateMessage message)
{
this.Data.PurchaseOrderNumber = message.NewValue;
RequestTimeout(DateTime.Now.AddMinutes(5), message.Update);
}
#endregion
}
}
但问题是超时没有更新到5分钟。超时仍然有效1分钟。
请你告诉我这里有什么问题?
提前致谢, Ajai
答案 0 :(得分:4)
佐贺超时无法更新。无论你做什么,他们都会开枪。在您的情况下,您将收到两个超时,并且假设您在超时处理程序中调用完成,您的传奇将在一分钟后结束。你需要添加一些逻辑来考虑这一点。
这样的事可能会这样做:
if(!updateReceived or state == ThisTimeoutWasRequestedByMyUpdateHandler) Complete();
希望这有帮助!