Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MassTransit事务发布_C#_.net_Transactions_Rabbitmq_Masstransit - Fatal编程技术网

C# MassTransit事务发布

C# MassTransit事务发布,c#,.net,transactions,rabbitmq,masstransit,C#,.net,Transactions,Rabbitmq,Masstransit,我不知道如何使用MassTransit 3.1.2和RabbitMQ 3.6.0发布事务性消息。我有一个基本的场景,我把一些东西保存到数据库中,然后我想发布一个事件。将System.Transactions.TransactionScope包装在其周围不起作用,在我完成作用域之前,消息已发送: using (var scope = new TransactionScope(TransactionScopeOption.Required)) { // Save to database h

我不知道如何使用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();
}

如果我检查它说它有事务性发布和确认,那么它应该是可能的,对吗?你有没有以任何方式解决这个问题?不幸的是没有。