公共交通事务发布

本文关键字:事务 | 更新日期: 2023-09-27 18:34:03

我不知道如何使用MassTransit 3.1.2和RabbitMQ 3.6.0发布事务性消息。我有一个基本方案,将某些内容保存到数据库,然后我想发布一个事件。将 System.Transactions.TransactionScope 包装在它周围不起作用,在我完成范围之前,消息已经发送:

using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
     // Save to database here.
     bus.Publish(new EntityCreatedEvent());
     // Event is already published at this point.
     scope.Complete();
}

总线的创建方式如下:

var rabbitMqHostAddress = new Uri($"rabbitmq://{ConfigurationManager.AppSettings["RabbitMqHost"]}/");
var bus = Bus.Factory.CreateUsingRabbitMq(r =>
{
    r.Host(rabbitMqHostAddress, h =>
    {
        h.Username(ConfigurationManager.AppSettings["RabbitMqUsername"]);
        h.Password(ConfigurationManager.AppSettings["RabbitMqPassword"]);
    });
});

公共交通事务发布

RabbitMQ 不注册事务。这是不可能的。

我知道

这已经有一段时间了,我可能没有正确理解这个问题,但是如果您想在数据库事务完成后引发事件,您可能会做这样的事情

using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
 // Save to database here.
scope.TransactionCompleted += (sender, args) => { bus.Publish(new EntityCreatedEvent()); };
 // Event is already published at this point.
 scope.Complete();
}