问题描述
命名空间: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.Messaging.ServiceBus
(轨道 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();
}