问题标签 [bullmq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
807 浏览

node.js - Bullmq 从队列中获取具有特定 ID 的作业

我正在尝试在 BullMQ 上创建一个结果队列,所有工作人员都可以发送结果添加具有特殊制作的 jobID 的作业。这个想法是,所有结果都会生成一个特定的 jobID,这样我就可以确切地知道结果是针对哪个进程的。

我已经按照文档getNextJob中的描述进行了尝试,但没有运气。

我找到的解决方案是使用queuEvents:每个进程在结果队列的状态上注册一个侦听器waiting,当具有它需要的 id 的作业到达时,该进程使用 a 获取作业getJob,读取结果数据并尝试移动作业完成。它有效,我可以正确获取工人产生的结果。

我遇到的问题是将结果作业移动到已完成状态,因为我无法使用 配置锁定令牌getJob并且我收到Missing lock for job 错误并且作业仍处于活动状态。

这是我在该过程中使用的(伪)代码

有没有人知道如何正确处理moveToCompleted

0 投票
0 回答
220 浏览

javascript - BullMQ 与其他消息队列实现有什么区别?

我一直在查看 BullMQ 的文档:

https://github.com/taskforcesh/bullmq

https://docs.bullmq.io/what-is-bullmq

我在它的比较图表中注意到它不包含 RabbitMQ 或 NATS Streaming 之类的项目。BullMQ 似乎是一种跨一台或多台服务器处理简单“作业”的解决方案。

为什么 BullMQ 比其他消息队列实现更适合简单的“作业”?我试图了解何时选择一种实现而不是另一种更有意义。

0 投票
0 回答
53 浏览

node.js - NodeJS 和 Express 后端的多队列系统设计

描述:

我正在使用 NodeJS 和 Express 后端实现一个虚拟队列系统。客户使用它来排队等候服务(例如,洗手间线或熟食线)。我很难在网上搜索示例,因为我发现队列实现的大部分用途是处理单个队列的繁重任务。我还没有见过多队列系统。

验收标准:

  1. 必须支持多个位置的多个队列。每个位置将有不同的资源(洗手间、更衣室),每个资源需要不同的队列。
  2. 必须支持实时监控和重新加入能力(将顶部用户添加到队列的最后一个)

我打算使用bullmq包,但不确定它是否支持多队列系统并且似乎有点矫枉过正,因为一旦添加到队列中,我并没有做任何花哨的事情,只是倒计时向前端用户展示他们的在行的位置是。在这种情况下,我可以使用一个好的生产级产品吗?

0 投票
0 回答
43 浏览

node.js - 在生产环境中安全/受限访问监控 UI(例如 Arena for BullMQ)

我有一个反应应用程序(create-react-app,使用 react-router-dom)和一个用 Node 编写的后端(使用 express)。节点应用程序正在使用 BullMQ,我希望有一种方法可以使用 Arena 之类的东西安全地监控生产中的队列(应用程序部署在 AWS 的弹性 beantalk 上)。

最初,我正在考虑在我的 react 应用程序中利用我现有的身份验证和授权(使用 Firebase),以获得可以拉入 Arena 用户界面的安全路线。我无法弄清楚如何:

  • 让 React 从后端路由和呈现页面,而不仅仅是从 ajax 请求中提取 JSON 响应
  • 假设我可以做到以上,确保我仍然可以将 JWT 传递到后端,以确保监控 UI 被锁定为超级管理员角色

如果我直接使用后端 URI 导航到 Arena 的网络服务器,我已经能够运行它,但这并不安全。我应该考虑其他选择吗?

干杯!

0 投票
1 回答
194 浏览

javascript - 公牛作业未在 cron [Node.js] 中触发

我有多个后台作业处理器使用如下的公牛包设置

我尝试使用cron包基于 Crontime 运行作业,但只处理了一项作业,请查看下面的示例

我已经尝试了很多方法让它工作,但似乎没有一个工作,将在下面列出一些

  • 运行await queue.obliterate({ force: true });
  • 在单独的实例上运行工作处理器
  • 为作业添加延迟 - queue.add('test',{}, {delay:500});
  • 为作业添加优先级 - queue.add('test',{}, {priority:1});

在上面的两个 Jobs(test, healthCheckPing) 中,只有一个总是被触发。

也就是说,要么名为test的作业得到处理,而另一个没有得到处理,或者名为healthCheckPing的作业得到处理,而另一个没有得到处理

这是下面的作业处理器功能

此代码在我的本地计算机上完美运行,但此问题仅在生产时出现。节点服务器使用 pm2(cluster mode, instance = 1) 运行

0 投票
1 回答
46 浏览

mikro-orm - 与 BullMQ 等后台工作人员一起使用时,MikroORM 是否需要 RequestContext?

我正在将 MikroORM 与BullMQ工作人员一起使用。当 MikroORM 与 Express 应用程序一起使用时,它需要一个RequestContext来维护每个请求的唯一身份映射。我怀疑在使用同一个 BullMQ 工作人员处理多个作业时也需要这样做。

有没有其他人成功地结合了这两个库?工人开始新工作时是否可以自动分叉实体管理器?

0 投票
1 回答
716 浏览

node.js - NestJS 中 Bull 的处理器从未处理过排队的作业

我正在尝试使用 Bull 框架将 DTO 发送到我的 Redis 队列并在处理器中处理这些 DTO。有时作业会传递给处理器(100 个中的 1 个),但大部分时间都因错误job stalled more than allowable limit而失败:我不知道如何修复它。

我给你一个小介绍,下面你可以看到我的代码。我创建了queue-api用作队列包装器的模块,例如订单队列。然后我将此模块导入到我想将 DTO 发布到队列中的模块,在我的情况下order-module

queue-api 模块文件

订单模块文件

这个处理器处理程序几乎从不被调用。

你知道我的代码有什么问题吗?谢谢你的建议。

0 投票
0 回答
42 浏览

node.js - 如何检查 BullMQ 队列大小?

我有一个 BullMQ 动态队列。有没有办法检查队列中有多少项目?我已经在 google 和 stackoverflow 中进行了检查,但找不到任何解决方案。

0 投票
0 回答
54 浏览

node.js - 寻找一次只允许一个消费者的 Node.js 队列系统(类似于 RabbitMQ 中的单一活动消费者)

我的情况要求下一条消息只有在前一条消息完成处理后才开始处理。(消息处理函数是一个异步函数)。

RabbitMQ 通过 Single Active Consumer 功能和将 prefetch 设置为 1 来满足我的需求。 关于 Single Active Consumer

  • 声明了一个队列,并且一些消费者大致同时注册到它。
  • 第一个注册的消费者成为单一的活跃消费者:消息被分派给它,而其他消费者被忽略。
  • 单个活跃消费者由于某种原因被取消或干脆死亡。其中一个注册的消费者成为新的单一活动消费者,并且消息现在被分派给它。换句话说,队列会自动故障转移到另一个消费者。

,但不能通过 npm 安装。

是否有任何替代队列系统可以做到这一点并且可以通过 npm 安装?

作为我对@paulsm4 的回复我目前不考虑使用 RabbitMQ 的原因是因为我计划将我的应用程序部署到 Heroku,并且希望在不需要使用第三方 RabbitMQ 插件的情况下使其尽可能简单。但是,无论如何我都会使用 Redis,因此任何依赖 Redis 的库都可以。

0 投票
0 回答
85 浏览

testing - Github CI 炸毁内存

我在 Github 中有一个 CI 设置,它运行我目前拥有的所有测试(大约 200 个),这些测试是使用 jest 和 superagent 的 e2e 测试,遵循 NestJS 的标准测试模式,也意味着我为每个模块都有一个或多个测试套件(文件)

一切都是粉红色和美丽的,直到最近我不得不使用 BullMQ(也集成在框架中)实现一些队列。在这一点上,我的 PR 一直未能通过检查,甚至跳过了实际使用队列测试端点的测试套件,炸毁了内存,并使另一个理论上不相关的套件超时。这是最终的错误跟踪:

除了使用我所说的已经集成在 NestJS 中的 BullMQ 模块/装饰器之外,自定义代码实现的增加很少,并且测试在本地通过很好

我相信问题是否与队列实现有关,并且现在我将 Redis 设置添加到 CI,如果我跳过使用此实现构建模块的测试,一切都应该没问题,但这一直在发生

尝试增加全局超时设置,但到目前为止没有任何改变

我一直想知道几天来试图找到根本原因,但一无所获

在这一点上感觉完全迷失了,有没有人知道这里可能发生什么,或者有任何线索知道如何寻找其根本原因?

提前致谢