正确答案: 启用会话的 Azure Service Bus topic (sessionId=OrderId);为每个下游服务创建订阅;使用 Service Bus 事务完成传入消息并在同一事务中发送两个出站消息;依赖订阅上的死信子队列处理毒消息。.
为什么这是答案
正确答案利用了 Azure Service Bus 的关键特性来满足所有要求。启用会话 (sessionId=OrderId) 确保了按 OrderId 严格的消息顺序处理。Service Bus 事务保证了传入消息的处理和两个出站消息的发送是原子性的,要么全部成功,要么全部回滚。为每个下游服务创建订阅实现了扇出发布。死信子队列是处理毒消息的标准机制,确保它们被隔离而不会丢失。
其他选项不满足所有要求:
不带会话的 Service Bus Queue 无法保证按 OrderId 顺序处理。手动补偿复杂且容易出错。
Azure Storage Queue 不支持事务,也无法保证严格的顺序处理。
Azure Event Grid Topic 不保证严格的顺序,也不支持事务。
不带会话的 Service Bus Topic 无法保证按 OrderId 顺序处理,禁用死信会导致毒消息丢失。