我试图在多个服务之间创建分布式事务。为此,我使用公共交通框架-信使功能和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并执行活动时才能完成。你怎么解决这个问题?
发布于 2020-04-19 14:35:22
没有集中式的与信使协调,路由选择是真相的来源。如果路由选择单处于等待由活动执行的队列中,且该活动不可用,则路由提示将留在该队列中,直到服务启动为止。
没有任何方法来改变这种行为,您的路由选择活动服务应该是可用的。您可能希望监视您的服务,以确保它们正在运行,似乎需要的活动服务不可用将是一种不健康的情况。
https://stackoverflow.com/questions/61300799
复制相似问题