在 Mass Transit 中指定时间其中一项活动未消耗命令时补偿事务
compensate transaction when one of the activities not consume command at the specified time in Mass Transit
我正在尝试在多个服务之间创建分布式事务。为此,我正在使用公共交通框架——快递功能和 RabbitMQ。我的路由单配置是:
public class RoutingSlipPublisher
{
private readonly IBusControl _bus;
public RoutingSlipPublisher(IBusControl bus)
{
_bus = bus;
}
public async Task<Guid> PublishInsertCoding(Coding coding)
{
var builder = new RoutingSlipBuilder(NewId.NextGuid());
builder.AddActivity("Core_Coding_Insert", new Uri($"{RabbitMqConstants.RabbitMqUri}Core_Coding_Insert"));
builder.AddActivity("Kachar_Coding_Insert", new Uri($"{RabbitMqConstants.RabbitMqUri}Kachar_Coding_Insert"));
builder.AddActivity("Rahavard_Coding_Insert", new Uri($"{RabbitMqConstants.RabbitMqUri}Rahavard_Coding_Insert"));
builder.SetVariables(coding);
var routingSlip = builder.Build();
await _bus.Execute(routingSlip);
return routingSlip.TrackingNumber;
}
}
问题:
当 Kachar_Coding_Insert 消费者在指定时间内未连接到 RabbitMQ 时,我想要补偿交易。但这并没有发生,直到 Kachar_Coding_Insert 消费者连接到 RabbitMQ 并执行 activity,交易才完成。
你是怎么解决这个问题的?
Courier 没有集中编排,路由单是真实的来源。如果路由名单在等待 activity 执行的队列中,并且 activity 不可用,则路由名单将保留在该队列中,直到服务启动。
没有任何方法可以更改此行为,您的传送名单 activity 服务应该可用。您可能想要监控您的服务以确保它们 运行,似乎必需的 activity 服务不可用将是一种不健康的情况。
我正在尝试在多个服务之间创建分布式事务。为此,我正在使用公共交通框架——快递功能和 RabbitMQ。我的路由单配置是:
public class RoutingSlipPublisher
{
private readonly IBusControl _bus;
public RoutingSlipPublisher(IBusControl bus)
{
_bus = bus;
}
public async Task<Guid> PublishInsertCoding(Coding coding)
{
var builder = new RoutingSlipBuilder(NewId.NextGuid());
builder.AddActivity("Core_Coding_Insert", new Uri($"{RabbitMqConstants.RabbitMqUri}Core_Coding_Insert"));
builder.AddActivity("Kachar_Coding_Insert", new Uri($"{RabbitMqConstants.RabbitMqUri}Kachar_Coding_Insert"));
builder.AddActivity("Rahavard_Coding_Insert", new Uri($"{RabbitMqConstants.RabbitMqUri}Rahavard_Coding_Insert"));
builder.SetVariables(coding);
var routingSlip = builder.Build();
await _bus.Execute(routingSlip);
return routingSlip.TrackingNumber;
}
}
问题: 当 Kachar_Coding_Insert 消费者在指定时间内未连接到 RabbitMQ 时,我想要补偿交易。但这并没有发生,直到 Kachar_Coding_Insert 消费者连接到 RabbitMQ 并执行 activity,交易才完成。 你是怎么解决这个问题的?
Courier 没有集中编排,路由单是真实的来源。如果路由名单在等待 activity 执行的队列中,并且 activity 不可用,则路由名单将保留在该队列中,直到服务启动。
没有任何方法可以更改此行为,您的传送名单 activity 服务应该可用。您可能想要监控您的服务以确保它们 运行,似乎必需的 activity 服务不可用将是一种不健康的情况。