每个消费者的传输事务发件箱隔离级别



我有一个消费者,我在那里开始一个可序列化的事务。

public class Consumer : IConsumer<Message>
{
public async Task Consume(ConsumeContext<Message> context)
{
using var transaction = dbContext.Database.BeginTransaction(System.Data.IsolationLevel.Serializable);

// Do Something
transaction.Commit();
}
}

我正在尝试使用新的MassTransit事务发件箱,但是配置了发件箱后,我无法打开这个内部事务,因为所有消费者都被包装在一个事务中,它不允许嵌套事务。

我认为解决这个问题的一种方法是将发件箱事务隔离级别更改为serializable,这样我就不需要在消费者中打开这个,但我不想更改所有发件箱消费者的隔离级别。

是否有办法配置每个消费者的发件箱事务隔离级别?

如果没有,有没有其他方法可以解决这个问题?

我找到了如何更改所有发件箱消费者的隔离级别,但没有找到如何单独更改的方法。

您可以通过添加和配置以下选项来配置IsolationLevel:

services.AddOptions<EntityFrameworkOutboxOptions>()
.Configure(options => options.IsolationLevel = IsolationLevel.Serializable);

最新更新