MassTransit 状态机等待所有消息

问题描述 投票:0回答:1

我正在尝试使用公共交通创建一个状态机,在其中等待 3 个状态更改为“已完成”。然后当我确定所有 3 个都已完成时,我想调用一些最终代码或其他代码。怎么做?使用下面的代码我重新标记状态可以。然后我尝试了不同的方法来使用注释部分,但没有任何效果。也许这很微不足道,但不知何故我无法让它发挥作用。谢谢你

     Initially(
         When(ImportDataCheckFinished)
            .TransitionTo(ImportDataCheckFinishedState),
         When(BusinessDataCheckFinished)
            .TransitionTo(BusinessDataCheckFinishedState),
         When(TestMessage)
            .TransitionTo(TestMessageState));

        //During(ImportDataCheckFinishedState,
        //When(BusinessDataCheckFinished),
        //When(TestMessage)
        //    .Then(x =>
        //    {
        //        ;
        //    }));

编辑:

我更改了代码并尝试使用复合事件,但它从未触发。我有断点。

            InstanceState(x => x.CurrentState);

        Event(() => ImportDataCheckFinished, x => x.CorrelateById(context => context.Message.RequestId));
        Event(() => BusinessDataCheckFinished, x => x.CorrelateById(context => context.Message.RequestId));

        Initially(
             When(ImportDataCheckFinished)
                .TransitionTo(ImportState),
             When(BusinessDataCheckFinished)
                .TransitionTo(BusinessState)
        );

        During(ImportState,
           When(BusinessDataCheckFinished)
               .TransitionTo(BusinessState));


        CompositeEvent(() => Finished, x => x.ReadyEventStatus, ImportDataCheckFinished, BusinessDataCheckFinished);

        DuringAny(
            When(Finished)
            .Then(x =>
            {
                ;
            })
        );
c# .net azureservicebus masstransit messagebroker
1个回答
0
投票

您可以像这样使用大众运输状态机的 WhenEnter

this.WhenEnter(this.Final, x => x
.Publish(ctx => new CompletedEvent(ctx.Saga.Source.UserId)));
© www.soinside.com 2019 - 2024. All rights reserved.