MicrosoftMicrosoft Azure Developer Associate AZ-204 Certification·CN·更新于 5 Aug 2026
一个工作进程从 Service Bus 队列 (QueueA) 处理消息。对于每条消息,它必须向一个主题 (TopicB) 发送通知,并向另一个队列 (QueueC) 发送命令,然后完成原始消息。所有这三个操作必须同时成功或失败。您应该怎么做?
选择一个答案
点击一个选项来检查您的答案。
正确答案: 在 Service Bus 事务 (TransactionScope 或 ServiceBusTransaction) 中执行 QueueA 上的接收-完成操作以及向 TopicB 和 QueueC 的发送操作,使用相同的 ServiceBusClient 连接。, 确保 QueueA、TopicB 和 QueueC 位于同一个 Service Bus 命名空间中。.
为什么这是答案
此场景要求所有操作(从 QueueA 接收并完成消息,向 TopicB 发送通知,以及向 QueueC 发送命令)要么全部成功,要么全部失败,这正是事务的原子性特性。Azure Service Bus 支持跨多个操作的事务,包括接收、发送和完成消息。为了实现这一点,所有参与事务的 Service Bus 实体(QueueA、TopicB 和 QueueC)必须位于同一个 Service Bus 命名空间中,并且所有操作都必须在同一个事务作用域内执行,使用同一个 ServiceBusClient 连接。
使用单独的 ServiceBusClient 实例会阻止事务的原子性,因为事务需要共享连接上下文。在所有实体上启用重复检测可以防止消息重复处理,但不能保证操作的原子性。Azure Functions 的多个输出绑定可以简化代码,但运行时本身不保证跨不同 Service Bus 实体操作的原子提交,除非明确使用 Service Bus 事务。