为什么在使用Mediator时在Saga中使用Request时会出现找不到调度程序的异常?

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

我正在使用 MassTransit 8.1.3 和 Mediator 运输,如下所示:

services.AddMediator(x => {
   x.AddSagaStateMachine<MyStateMachine, MyState>().InMemoryRepository();
});

在我的传奇中,我正在做请求:

/*
At first declare request in state machine like this:
public Request<
        MyState, 
        GetSomething, 
        GetSomethingResponse> 
        GetSomethingRequst { get; private set; } = null!;
*/

Request(() => GetSomethingRequest);

Initially(When(MyEvent)
    .Then(context =>
    {
        // ...
    })
    .Request(GetSomethingRequest, context => new GetSomething {})
    .TransitionTo(MyOtherState));

问题是,当 Saga 收到 MyEvent 时,我收到以下异常:

---> MassTransit.ConfigurationException: A request timeout was specified but no message scheduler was specified or available
         at MassTransit.SagaStateMachine.RequestActivityImpl`3.SendRequest(BehaviorContext`1 context, SendTuple`1 sendTuple, Uri serviceAddress) in /_/src/MassTransit/SagaStateMachine/SagaStateMachine/Activities/RequestActivityImpl.cs:line 45
         at MassTransit.SagaStateMachine.RequestActivity`4.Execute(BehaviorContext`2 context, IBehavior`2 next) in /_/src/MassTransit/SagaStateMachine/SagaStateMachine/Activities/RequestActivity.cs:line 110
         at MassTransit.SagaStateMachine.ActivityBehavior`1.Execute[T](BehaviorContext`2 context) in /_/src/MassTransit/SagaStateMachine/SagaStateMachine/Behaviors/ActivityBehavior.cs:line 53

对我来说,这似乎是一个错误 - 我找不到为中介传输注册任何调度程序的方法。我尝试添加 MassTransit.Quartz 但它不能解决问题(我尝试在 ServiceCollection 和 IMediatorRegistrationConfigurator 上调用 .AddQuartz() )。或者也许我错过了什么?

masstransit
1个回答
0
投票

这不是一个错误,你正在使用中介器来做一些不应该使用的事情。

使用中介者时,调度、带有请求的传奇,基本上任何不立即执行的事情都是不行的。

© www.soinside.com 2019 - 2024. All rights reserved.