如果我有很多活动,是否会导致资源阻塞或请求超时?
这是我的场景:
我有一个 api 控制器,它向消费者发送订单请求;我使用请求/响应模式从消费者那里接收ErrorMessage属性,并根据该属性响应返回,如果它为空,我想以OK()其他方式返回,返回BadRequest或Ok但带有如下消息:Product out of stock to notice to the client。
在我的消费者中,我建立了一个路由单,其中包含 2 个活动:
ReserveProductActivity:这会减少库存产品的数量,if product quantity < 0我将向消费者发布一条带有ErrorMessage的消息并补偿之前的活动。
public async Task Consume(ConsumeContext<ProcessOrder> context)
{
try
{
if (!string.IsNullOrEmpty(context.Message.ErrorMessage))
{
await context.RespondAsync<OrderSubmitted>(new
{
context.Message.OrderId,
context.Message.ErrorMessage
});
return;
}
RoutingSlipBuilder builder = new RoutingSlipBuilder(context.Message.OrderId);
// get configs
var settings = new Settings(_configuration);
// Add activities
builder.AddActivity(settings.CreateOrderActivityName, settings.CreateOrderExecuteAddress);
builder.SetVariables(new { context.Message.OrderId, context.Message.Address, context.Message.CreatedDate, …Run Code Online (Sandbox Code Playgroud)我设法通过一系列活动实施了 MassTransit Courier 路由单。我决定添加一个状态机来监控它,所以我创建了单独的事件和状态,并使用 EF Core 作为 Automatonymous 状态机的存储。为了跟踪当前状态,我在每个活动执行结束时发布一个事件。一切正常,我可以监控数据库中路由单的当前状态。
但这是最好的方法吗?根据 MassTransit 文档中的这一部分:https ://masstransit-project.com/advanced/courier/events.html看起来事件应该自动发布。那么也许有另一种方法来监控路由单,它不需要创建事件并在每个活动中手动发布它们?