masstrtransit:在TransitionTo之后响应



我是masstrtransit的新手,正在寻找答案。当所有的活动都完成了,每个阶段都结束了,该如何应对?

有可能吗?

例如。

在控制器:

private readonly IRequestClient<CreateDataRequest> client; 
private readonly TestDbContext db; // dbContext from saga
[HttpPost]
public async Task<IActionResult> CreateData(CreateData model)
{
var id = Guid.NewGuid();
var response = await client.GetResponse<CreateDataResponse>(new CreateDataRequest(id, 
model.UserId));
var state= await db.Data.FirstOrDefaultAsync(s => s.CorrelationId == id);
return Ok(state);
}

StateMachine:

private EventActivityBinder<ApplicationState, CreateDataRequest> CreateDataReceived
Initially(
When(CreateDataReceived)
.Then(s =>
{
s.Saga.UserId = s.Message.UserId;
})
// I tried like this, but sometimes is controler I get null
// .Respond(x => new CreateDataResponse(x.Message.CorrelationId))
.Request(GetAdditionalData, c => new GetAdditionalDataRequest(c.Message.CorrelationId))
.TransitionTo(GetAdditionalData.Pending)
// here I want to respond CreateDataResponse after CurrentSatge=GetData.Pending persisted
)

您可以在端点上启用内存中的发件箱(UseInMemoryOutbox()),并且消息将不会被发送,直到saga状态被持久化。

最新更新