Why does the MassTransit state machine triple the time for a simple request response?

29 Views Asked by At

Here is my request code:

var response = await requestClient.GetResponse<PayloadResponse>(new PayloadRequest {  DomainName = "Me", PayloadId = Guid.NewGuid() }, stoppingToken, RequestTimeout.After(3));

Here is my Saga State machine:

namespace Company.StateMachines
{
    using Contracts;
    using MassTransit;
    using MassTransit.Contracts.JobService;
    using Microsoft.Extensions.Logging;
    using System;

    public class PayloadStateMachine :
        MassTransitStateMachine<PayloadState>
    {
        public PayloadStateMachine(ILogger<PayloadStateMachine> logger)
        {
            InstanceState(x => x.CurrentState);

            Event(() => PayloadRequestEvent, x => x.CorrelateById(context => context.Message.PayloadId));
            

            Initially(
                When(PayloadRequestEvent)
                    .Then(context =>
                    {
                        
                        context.Saga.RequestId = context.Message.RequestId;
                        context.Saga.ResponseAddress = context.Message.ResponseAddress;                       
                        PayloadSendEvent cb = new PayloadSendEvent();
                        cb.CookTemp = context.Message.CookTemp;
                        cb.CorrelationId = context.Saga.CorrelationId;
                        cb.Property = context.Message.Property;
                        context.Publish(cb);
                    }
                    )                    
                    .TransitionTo(FinishCooking)
            );            

            During(FinishCooking,               
                When(BurgerCookerFinishedCookingEvent)
                .TransitionTo(Completed)                
                .SendAsync(context => context.Saga.ResponseAddress,
                context => context.Init<PayloadResponse>(new
                {
                    MyResponse = context.Message.Note,
                    Property = context.Message.Property
                }), (context, sendContext) => sendContext.RequestId = context.Saga.RequestId));

            SetCompletedWhenFinalized();
        }
       
        public State PayloadSendEvent { get; private set; }

        public State FinishCooking { get; private set; }
        public State Completed { get; private set; }

        public Event<PayloadRequestEvent> PayloadRequestEvent { get;  }
        public Event<PayloadPrepareSendEvent> PayloadProcessEvent { get;  }
        public Event<PayloadResponseEvent> BurgerCookerFinishedCookingEvent { get; }        

    }
}

Can anyone tell me why using a state machine takes 3 seconds to get a response back but if I remove the state machine I get the response back in under a second? I really need to use a state machine but not sure where I am going wrong.

Need help here to figure out next steps.

0

There are 0 best solutions below