【发布时间】:2021-11-17 23:50:01
【问题描述】:
我有一个具有 ServiceBusTrigger Azure 函数的应用程序。在这个函数的处理程序中,当我在“QueueA”中收到队列消息后,我需要做一些业务逻辑,最后,我必须这样做:
- 将消息发布到另一个系统将使用的“TopicA”
- 向我的“QueueB”发布另一种消息,“QueueB”会将内容保存到数据库,更新我的活动状态
- 在文件共享存储中将文件从一个文件夹移动到另一个文件夹
- 将“QueueA”中收到的消息内容保存到数据库中
我需要在Transaction Scope 中完成所有这些工作,因为如果一项失败,其他任何一项都无法继续。
没有第二项,我的 cenário 工作得很好,因此在我尝试发布到同一事务中的主题和队列后,我收到了以下错误消息:
“本地事务不能跨越多个顶级实体,例如队列或主题。”
来自Microsoft's documentation 我发现了这个:
服务总线支持在事务范围内针对 SINGLE 消息传递实体(队列、主题、订阅)进行分组操作。例如,您可以在一个事务范围内向一个队列发送多条消息,只有在事务成功完成后,这些消息才会提交到队列的日志中。
我只是被困在这里,不知道我该怎么做才能保证线程安全。任何人都通过它并且可以帮助我发布到事务范围内的队列和主题?
【问题讨论】:
标签: c# azureservicebus transactionscope azure-servicebus-queues