如何完成基于 class 的 Saga,以便将其从 SQL 数据库 (EF Core) 中删除?
How do I finalize a class based Saga, so that it is deleted from the SQL database (EF Core)?
在我们考虑采用公共交通时,我正在尝试了解更多有关公共交通的信息。我现在有下面基于 class 的 Saga,它按预期工作:
public class EchoSaga : ISaga,
InitiatedBy<TextEntered>,
Orchestrates<TextEchoStart>,
Orchestrates<EchoEnd>
{
public Guid CorrelationId { get; set; }
public string CurrentState { get; set; }
public string Text { get; set; }
public Task Consume(ConsumeContext<TextEntered> context)
{
CurrentState = "Entered";
Text = context.Message.Text;
return Task.CompletedTask;
}
public Task Consume(ConsumeContext<TextEchoStart> context)
{
CurrentState = "Start";
Text = context.Message.Text;
return Task.CompletedTask;
}
public Task Consume(ConsumeContext<EchoEnd> context)
{
CurrentState = "End";
Text = context.Message.Text;
return Task.CompletedTask;
}
}
基于 class 的 Saga 不同于状态机 Saga,在 Saga 部分的文档中有更多描述:http://masstransit-project.com/MassTransit/understand/key-ideas.html.
如何在使用 EchoEnd 后将 Saga 标记为已完成,以便将其从数据库中删除(我已经设置了存储库)?如果我使用的是状态机 Saga,那么我可以这样做:
.Finalize()
.SetCompletedWhenFinalized()
如何使用基于 class 的 Saga 执行此操作?
我意识到我可能在这里倒退了一点,但是我正在尝试了解 Mass Transit 是如何开始的以及它现在在哪里,看看它是否符合我们的要求。到目前为止非常满意。
如果您将 ConsumeContext
转换为 SagaConsumeContext<TSaga, TMessage>
,则有一个 SetCompleted
方法表明 saga 已完成并且可以从存储库中删除。
如果直接投射不起作用(由于在管道中使用代理),您可能需要使用 context.GetPayload<SagaConsumeContext<TSaga, TMessage>>()
。
在我们考虑采用公共交通时,我正在尝试了解更多有关公共交通的信息。我现在有下面基于 class 的 Saga,它按预期工作:
public class EchoSaga : ISaga,
InitiatedBy<TextEntered>,
Orchestrates<TextEchoStart>,
Orchestrates<EchoEnd>
{
public Guid CorrelationId { get; set; }
public string CurrentState { get; set; }
public string Text { get; set; }
public Task Consume(ConsumeContext<TextEntered> context)
{
CurrentState = "Entered";
Text = context.Message.Text;
return Task.CompletedTask;
}
public Task Consume(ConsumeContext<TextEchoStart> context)
{
CurrentState = "Start";
Text = context.Message.Text;
return Task.CompletedTask;
}
public Task Consume(ConsumeContext<EchoEnd> context)
{
CurrentState = "End";
Text = context.Message.Text;
return Task.CompletedTask;
}
}
基于 class 的 Saga 不同于状态机 Saga,在 Saga 部分的文档中有更多描述:http://masstransit-project.com/MassTransit/understand/key-ideas.html.
如何在使用 EchoEnd 后将 Saga 标记为已完成,以便将其从数据库中删除(我已经设置了存储库)?如果我使用的是状态机 Saga,那么我可以这样做:
.Finalize()
.SetCompletedWhenFinalized()
如何使用基于 class 的 Saga 执行此操作?
我意识到我可能在这里倒退了一点,但是我正在尝试了解 Mass Transit 是如何开始的以及它现在在哪里,看看它是否符合我们的要求。到目前为止非常满意。
如果您将 ConsumeContext
转换为 SagaConsumeContext<TSaga, TMessage>
,则有一个 SetCompleted
方法表明 saga 已完成并且可以从存储库中删除。
如果直接投射不起作用(由于在管道中使用代理),您可能需要使用 context.GetPayload<SagaConsumeContext<TSaga, TMessage>>()
。