我正在使用 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() )。或者也许我错过了什么?
这不是一个错误,你正在使用中介器来做一些不应该使用的事情。
使用中介者时,调度、带有请求的传奇,基本上任何不立即执行的事情都是不行的。