检测 Azure 服务总线队列中相同的未处理消息

我们正在构建一个系统来预先计算所有客户的所有价格。基于我们 ERP 中的一些触发器(如价格表更改),我们将把所有受影响的客户编号放入队列中,监听该队列的 Azure 函数将重新计算该特定客户的价格。

例子:在我们的ERP中,我们将把所有受影响的客户号放入队列,监听该队列的Azure函数将重新计算该特定客户的价格。对价格表进行更改,用户点击 “保存”。3000名客户受此变更影响,被添加到计算队列中。如果计算需要两秒钟,而我们可以并行进行10次计算,那么最后一个客户的价格将在3000*210=600秒后完成。当一个客户号在队列中等待的时候,用户再做一次更改,然后点击保存。在这种情况下,我们希望排除添加所有已经存在于队列中的客户号。

问题:在Azure服务总线队列中,有一个客户号在队列中等待,我们希望排除添加队列中已经存在的所有客户号。Azure 服务总线队列具有重复检测功能,但这是基于时间的。如果队列中已经有另一条内容相同的消息,是否有其他手段可以避免将消息添加到队列中?

NB:所有其他资源都在Azure中,所以我们只关注基于Azure的队列和事件解决方案。

解决方案:

Azure服务总线队列有一个重复检测功能,但那是基于时间的。如果队列中已经有另一个具有相同内容的消息,是否有其他手段可以避免将消息添加到队列中?

重复检测是基于消息ID随时间变化的。如果你想要基于内容的重复数据删除,你需要将消息ID变成内容哈希。这样相同的内容会产生相同的消息ID,后续的消息就会被丢弃。我已经详细描述了这个想法,在我的 岗位.

更新

从评论到答案。

这是否只对队列中被删除的东西有效?如果我的消息在5分钟前被处理过,我肯定想重新运行它。但如果我的消息还在队列中,我就不想再添加它。

这不是去重复的工作方式。它不关心消息是否在队列中,它看消息的ID,并检查是否有相同ID的消息在去重复的时间窗口内被处理。如果答案是 “是”,该消息将被认为是重复的,将被丢弃。否则,该邮件将被处理。如果该ID的最后一条消息的时间窗口已经过去,则该消息不会被认为是重复的,将被处理。

也许你需要的不是直接从队列中处理。而是使用队列将工作项发送到数据存储中,并定期查询数据存储来执行工作项。这样,如果队列上有重复的消息到达,而数据存储中还有相同的工作项,消息就会被丢弃,不会写入数据存储中。否则,消息会被写入数据存储中,并由周期性的进程查询数据存储来执行工作项。

给TA打赏
共{{data.count}}人
人已打赏
未分类

模型精度很低。如何提高

2022-9-8 9:54:16

未分类

世博字体加载不正确

2022-9-8 9:54:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索