#17522·langfuse

批量操作作业 ID 可以在不显示任何提示的情况下,将不同查询或目标的不同后续操作进行去重

作者: hunter3x3-tech创建于 2026年9月16日更新于 2026年9月17日
标签bug

批量动作任务 ID 可以默默地去除一个不同的后期操作, 使用不同的查询或目标

□ 总结

一般分批操作使用BullMQ`JobId',仅取自:

页:1 项目Id + 表格Name + 动作Id


ID不包括特定请求输入,例如批量查询或“目标” 爱德

因此,同一项目的两个不同的分批操作,表,和动作类型,即使代表不同的用户意图,也可以解决相同的BullMQ工作ID.

如果BullMQ仍然保留了较早的带有该ID的工作,那么提交后期操作可以被与更早的工作相比去重复,而不是创建一个包含新请求的有效载荷的执行实体.

这在一次分批行动失败后尤其成问题,因为失败的工作被保留而应用程序不再认为是"正在进行".

因此,以后的请求似乎通常会提交,而保留了BullMQ的工作仍然包含早期操作的查询和目标.

□ 受影响的代码

'GenerateBatchActionId ()' 目前只从下列来源生成批量动作特性:


导出 const 生成BatchActionId = (
projectId: 字符串,
动作编号: 字符串,
表格Name: 字符串,
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你还不知道 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}
返回 ${projectId}-${表Name}-${行动ID};
* ;

对于一般分批操作,“创建BatchActionJob()”然后在工作有效载荷中存储“query”和“targetId”等特定请求值:

有效载荷:{ 项目编号, 行动, 表格名称, 剪接日历: 新日期( ), 查询 : 查询与Snapshot, 目标 爱德, 类型: 动作Type, {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


但使用 :


{
任务:批量行动,
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

代码还明确描述这种ID用于分解.

因此:

页:1 同一项目

  • 同一个表格
  • 相同的动作类型 = 相同的BullMQ任务

即使在以下情况下:

页:1
查询A!=查询B

和(或)

目标A = 目标B

□ 具体实例: 在注释队列中添加痕迹

考虑在同一项目中进行两次单独的散装作业。

A行动

页:1 对象类型: 追踪 查询: QA 目标注释队列: 队列 -- A级


这创造了类似于以下工作:

页:1
任务代码 :
< project>- Traces- trace-add-- 注释- 队列

有效载荷 :
查询=质量保证
目标ID = 队列- A级

假设这份工作最终达到失败状态,仍留在BullMQ.

行动B

用户稍后执行另一个有效的批量动作:

页:1 对象类型: 追踪 查询: QB 目标注释队列: 队列- B


其中:

页:1
QA = QB ) (中文(简体) ).
排行榜 A = 排行榜 B

不过,生成的工作身份是相同的:

页:1 < project>- Traces- trace-add-- 注释- 队列


如果之前的工作仍然保留,BullMQ自定义的工作ID分解可以阻止为B创造新的工作.

保留的工作仍然是:

页:1
QA — 排队 A级

而不是:

页:1 QB 队列 B


□为什么失败的案子很重要

应用检查某一批次行动是否正在进行中,其状态相当于:

页:1
等待时
延迟
活动

A级 . . . . . . .

内容来源: langfuse/langfuse