问题标签 [bull]
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.
node.js - Bullmq 从队列中获取具有特定 ID 的作业
我正在尝试在 BullMQ 上创建一个结果队列,所有工作人员都可以发送结果添加具有特殊制作的 jobID 的作业。这个想法是,所有结果都会生成一个特定的 jobID,这样我就可以确切地知道结果是针对哪个进程的。
我已经按照文档getNextJob
中的描述进行了尝试,但没有运气。
我找到的解决方案是使用queuEvents
:每个进程在结果队列的状态上注册一个侦听器waiting
,当具有它需要的 id 的作业到达时,该进程使用 a 获取作业getJob
,读取结果数据并尝试移动作业完成。它有效,我可以正确获取工人产生的结果。
我遇到的问题是将结果作业移动到已完成状态,因为我无法使用 配置锁定令牌getJob
并且我收到Missing lock for job
错误并且作业仍处于活动状态。
这是我在该过程中使用的(伪)代码
有没有人知道如何正确处理moveToCompleted
?
node.js - 公牛队列 - 队列工作正常,但突然停止工作
我已经实施了牛队。它工作正常,但现在,队列停止工作。我检查了redis服务器。这些键存在 -
我无法弄清楚发生了什么问题。请在这方面提供帮助。
redis - Nest.js 公牛队列消费者,它只会将延迟的作业提升为等待
我有 Nest.js 应用程序,它以一定的延迟将作业添加到 Bull 队列:
现在这个应用程序没有任何消费者(即用@Processor()
装饰器装饰的类和用方法装饰的方法。相反,只有当队列中有等待作业时才会触发@Process()
另一个应用程序(实际上是用创建的同一部分应用程序的实例)NestFactory.createApplicationContext(AppModule)
它的任务是处理这些工作:
现在的问题是:因为主应用程序没有任何消费者正在运行,所以添加了一些延迟的作业会在队列中保持延迟,直到有一些消费者正在运行,它将作业从延迟提升到在指定时间过去后等待(这不是' t 在文档中的任何地方都明确说明,但它看起来像那样工作)。如果我在主应用程序中定义使用者,那么它会将作业从延迟提升到等待,但同时它正在处理它们,因此它们最终在队列中处于“完成”状态。我做了一个临时解决方案,在主应用程序中我创建了一个 cron 作业,它在指定的时间间隔内获取所有延迟的作业,检查作业是否可以提升,并提升它们。
它工作正常 - 但我想要另一种解决方案,无需手动操作。理想情况下,我想定义一个消费者,它的唯一责任是将工作提升到等待状态但不处理它们。阅读 Nest.js 和 Bull 文档我找不到这样的选项。这可以实现吗?
提前致谢。
node.js - Node.js 以哪种方式并行处理作业?[公牛v3]
我Node.js
最近开始尝试。
我目前正在设置一个应用程序,它将通过利用库并行处理多个队列,以在后台运行繁重的作业。bull
我正在寻找答案,我希望我没有在文档中错过。
**这对我来说仍然有点“模糊”,这个库如何并行处理这些任务。**
所以我有以下情况:
2 个作业同时运行,它们都很重,需要一些时间才能完成。
在这 2 个作业的运行期间,我仍然可以使用
应用程序的其余部分 - 事件循环没有被阻塞。
我从中得到的是,可能还有其他东西可以处理这两项工作,因为这JavaScript
是single-threaded
什么?
任何指导或任何建议将不胜感激!
javascript - npm Bull 作业执行变得随机而不是 FIFO
在我的一个项目中,我正在使用 NPM Bull。
这是示例。
当我在上面的示例中提到的队列名称中使用特殊字符@@时。作业的执行变得随机,当我删除特殊字符@@时,作业执行 FIFO。就他们在文档中提到的默认情况下,作业的执行是FIFO。我调试了它,但找不到原因。
redis - 普通应用程序需要禁用哪些 redis 命令?
我们有很多使用 redis 的服务,我们通过为每个服务创建一个特定的用户来保护我们新的分片集群 redis。为了保护我们的集群,每个用户需要禁用哪些 redis 命令?我们的服务正常使用 redis(读写密钥、发布/订阅通道、一些健康检查等),不需要管理员或危险命令。下面的 ACL 是否足以保护我们的 redis?
目的是从根本上保护我们的集群,因为不允许用户修改另一个密钥/通道,或者不允许用户执行集群/实例操作、管理任务等。最后,我们所有的服务都使用https:/ /github.com/StackExchange/StackExchange.Redis和https://www.npmjs.com/package/bull(带有连接器https://github.com/luin/ioredis)客户端。
node.js - NodeJS 和 Express 后端的多队列系统设计
描述:
我正在使用 NodeJS 和 Express 后端实现一个虚拟队列系统。客户使用它来排队等候服务(例如,洗手间线或熟食线)。我很难在网上搜索示例,因为我发现队列实现的大部分用途是处理单个队列的繁重任务。我还没有见过多队列系统。
验收标准:
- 必须支持多个位置的多个队列。每个位置将有不同的资源(洗手间、更衣室),每个资源需要不同的队列。
- 必须支持实时监控和重新加入能力(将顶部用户添加到队列的最后一个)
我打算使用bullmq包,但不确定它是否支持多队列系统并且似乎有点矫枉过正,因为一旦添加到队列中,我并没有做任何花哨的事情,只是倒计时向前端用户展示他们的在行的位置是。在这种情况下,我可以使用一个好的生产级产品吗?
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) 运行
node.js - 配置 Redis Bull Board
我正在尝试设置一个 Bull Board 以查看我的 Redis 队列,但是当我访问时我总是收到“页面地址无效”0.0.0.0:8000/admin/queues
我正在关注 Bull Board文档中的 Hello World 示例。
我的 Express 服务器正在运行0.0.0.0:8000
我的 Redis 服务器正在运行http://0.0.0.0:6379
,我能够成功添加和运行作业(使用 测试redis-cli
)。
问题:
- 文档说要安装
rpm i @bull-board/express
,但 Hello World 示例使用了该@bull-board/api
软件包,因此我在调试时也安装了该软件包。我应该这样做吗?
任何人都可以在这里看到我哪里出错了吗?
代码:
包.json
Redis 配置
Redis 报告通知队列
快速服务器设置
node.js - 能否使用 Bull 在 Redis 队列上设置 TTL?
我有一个使用 Bull 队列的应用程序。是否有一个参数可以让我在创建每个条目时自动为其设置 TTL(生存时间)?
如果直接使用 Redis 设置密钥,您可以使用setex key_name 10000 key_data
但是我怎样才能在 Bull 中实现呢?它只是一个 API 处理队列,我希望它在 24 小时后自动删除条目。
我在文档中没有看到任何内容: https ://github.com/OptimalBits/bull#documentation