You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Azure服务总线主题订阅函数仅单实例运行?

解决Azure服务总线订阅函数并发重复写入数据库的问题

方案1:限制函数为单实例运行

可以直接通过Azure门户配置函数应用的缩放规则,强制仅运行单个实例:

  • 进入目标函数应用的配置页面,切换到常规设置标签
  • 将缩放模式改为「手动」,然后把实例计数设为1
  • 这样所有消息都会被同一个实例处理,不会出现同ID消息并发执行的情况

注意:这种方式会牺牲处理吞吐量,如果消息量较大,容易造成消息堆积,仅适合低负载场景。

方案2:数据库层面加唯一性约束(推荐)

从根源上避免重复写入,最可靠的方式是在数据库表上针对消息ID字段添加唯一约束或设为主键:

  • 当第二条同ID消息尝试写入时,数据库会直接抛出唯一性冲突异常
  • 在函数代码中捕获该异常,根据业务需求选择:丢弃重复消息、标记消息处理失败,或者将插入逻辑改为更新逻辑(如果业务是要更新现有记录)

这种方法不影响函数的并发能力,同时从数据层面保证了唯一性,是生产环境的首选方案。

方案3:利用服务总线会话锁(需协调发送方)

如果需要保证同ID消息的处理顺序,且能协调发送方修改消息发送逻辑,可以给主题订阅启用会话:

  • 在Azure服务总线的主题订阅设置中开启「会话支持」
  • 让发送方将消息的SessionId设置为消息中的ID值
  • 此时服务总线会将同SessionId的消息按顺序投递,同一时间只有一个实例能处理该会话下的消息,避免同ID消息并发处理

但由于你无法控制发送方,这个方案的适用性有限。

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:00:35