【问题标题】:Azure Service Bus with transaction scope具有事务范围的 Azure 服务总线
【发布时间】:2021-08-25 18:22:45
【问题描述】:

命名空间Azure.Messaging.ServiceBus

我在我的 ServiceBusSender.SendMessageAsync 操作周围使用事务范围,并得到“其他资源管理器/DTC 不支持本地事务。”

事务范围可以与 Azure 服务总线一起使用吗?

当前范围

using (var transaction = new TransactionScope(
   TransactionScopeOption.Required,
   new TransactionOptions
   {
      IsolationLevel = IsolationLevel.Serializable
   },
   TransactionScopeAsyncFlowOption.Enabled))
{
   try
   {
     // do a database operation
     // do azure bus sendmessageasync
   }
    catch
   {
      transaction.Dispose();
      throw;
   }
}

【问题讨论】:

    标签: azure azureservicebus transactionscope msdtc


    【解决方案1】:

    使用Azure.Messaging.ServiceBus(track 2)SDK 可以实现跨实体交易。

    var options = new ServiceBusClientOptions { EnableCrossEntityTransactions = true };
    await using var client = new ServiceBusClient(connectionString, options);
    
    ServiceBusReceiver receiverA = client.CreateReceiver("queueA");
    ServiceBusSender senderB = client.CreateSender("queueB");
    ServiceBusSender senderC = client.CreateSender("topicC");
    
    ServiceBusReceivedMessage receivedMessage = await receiverA.ReceiveMessageAsync();
    
    using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
    {
        await receiverA.CompleteMessageAsync(receivedMessage);
        await senderB.SendMessageAsync(new ServiceBusMessage());
        await senderC.SendMessageAsync(new ServiceBusMessage());
        ts.Complete();
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多