NServiceBus TimeOut Manager

时间:2011-01-19 05:55:25

标签: nservicebus

我正在开发一个示例应用程序,以使用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

1 个答案:

答案 0 :(得分:4)

佐贺超时无法更新。无论你做什么,他们都会开枪。在您的情况下,您将收到两个超时,并且假设您在超时处理程序中调用完成,您的传奇将在一分钟后结束。你需要添加一些逻辑来考虑这一点。

这样的事可能会这样做:

if(!updateReceived or state == ThisTimeoutWasRequestedByMyUpdateHandler)
   Complete();

希望这有帮助!