批量操作作业 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