【问题标题】:MassTransit Saga State to Instance State MappingMassTransit Saga 状态到实例状态映射
【发布时间】:2017-04-05 02:40:45
【问题描述】:

我是 MassTransit 的新手,我似乎无法弄清楚它如何将我在 saga (MassTransitStateMachine) 上定义的状态映射到相关 SagaStateMachineInstance 类的“State”属性。

例如,如果我有一个具有三种状态的状态机类:

public class MySaga :
   MassTransitStateMachine<MySagaState>
{
    public State Executing { get; private set; }
    public State Completed { get; private set; }
    public State Failed { get; private set; }
    ...
}

我的状态机实例类有一个“状态”属性

public class MySagaState : SagaStateMachineInstance
{
    public Guid CorrelationId { get; set; }
    public int State { get; set; }
}

MT 如何决定哪个 saga 状态是哪个整数?

似乎还有两个内置的 saga 状态,“Initial”和“Final”,所以这个例子有 5 个状态。状态到整数的映射是如何完成的?

【问题讨论】:

    标签: c# masstransit automatonymous


    【解决方案1】:

    作为状态机定义的一部分,您需要指定状态以便为它们分配编号:

    public class MySaga :
      MassTransitStateMachine<MySagaState>
    {
        public MySaga()
        {
            InstanceState(x => x.State, Executing, Completed, Failed);
            // 1 = Initial, 2 = Final, 3 = Executing, 4 = Completed
            // 5 - Failed (1 & 2 are built-in states)
        }
    
        public State Executing { get; private set; }
        public State Completed { get; private set; }
        public State Failed { get; private set; }
        ...
    }
    

    【讨论】:

      【解决方案2】:

      State 属性表示当前状态机状态。每当状态机进入另一个状态时,它都会发生变化。

      它可以是复杂类型 State 或原始类型 stringint。第一种情况,如果使用数据库持久化,State 对象的Name 属性将存储在数据库中。如果您使用string(所有 MassTransit 示例都建议这样做)- 很明显,该属性将包含状态名称,代表状态机属性名称。如果您使用int - 通过查看值是最难理解的,因为它的约定就像零是无状态,一是初始状态,2 是最终状态,3 以上代表所有其他状态。

      我真的建议使用string,因为它更容易映射并且没有混淆。

      所以你的传奇状态将如下所示:

      public class MySagaState : SagaStateMachineInstance
      {
          public Guid CorrelationId { get; set; }
          public string CurrentState { get; set; }
      }
      

      您还应该在状态机构造函数中配置状态机状态对象的 state 属性:

      InstanceState(x => x.CurrentState);
      

      随着这个 saga 的执行,这个属性将获得值 ExecutingCompletedFailed,因为你已经定义了状态属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-22
        • 1970-01-01
        相关资源
        最近更新 更多