问题标签 [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 - 在上一个作业完成之前不要处理下一个作业(BullJS/Redis)?
基本上,每个客户端(clientId
与它们关联)都可以推送消息,重要的是,在第一个消息完成处理之前,不会处理来自同一客户端的第二条消息(即使客户端可以连续发送多条消息,并且它们是有序的,并且多个发送消息的客户端理想情况下不应相互干扰)。而且,重要的是,一个工作不应该被处理两次。
我认为使用 Redis 可能能够解决这个问题,我开始使用 Bull 库进行一些快速原型设计,但我显然做得不好,我希望有人知道如何继续。
这是我到目前为止所尝试的:
- 创建作业并将它们添加到一个进程的相同队列名称中,使用
clientId
作为作业名称。 - 在 2 个单独的进程上等待大量随机时间的同时消耗作业。
- 我尝试添加我正在使用的库提供的默认锁定 (
bull
),但它锁定在 jobId 上,它对每个作业都是唯一的,而不是在 clientId 上。
我想要发生的事情:
clientId
在前一个消费者完成处理之前,其中一个消费者不能从同一个消费者那里接手工作。- 但是,它们应该能够
clientId
毫无问题地(异步地)并行地从不同的 s 中获取项目。(我还没有走到这一步,我现在只处理一个clientId
)
我得到什么:
- 两个消费者都从队列中消费尽可能多的项目,而无需等待前一个项目
clientId
完成。
Redis 甚至是适合这项工作的工具吗?
示例代码
这是使用 3 个不同的进程运行的,您可能会这样称呼它们(尽管我使用不同的选项卡来更清楚地了解正在发生的事情)
typescript - 如何遍历在 NestJs Bull 中注册的所有队列?
我想遍历在 NestJs Bull 中注册的所有队列并对每个队列做一些事情。
例如我已经有了这个:
但我想做这样的事情:
似乎我只能使用队列名称一次进入队列,并且只能使用 @Inject 装饰器。有没有其他的排队方式?
queue - Bull Queue 重试被推到尾部,而不是头部
使用公牛队列。我有一个限速队列。考虑到速率限制和退避策略,我希望在队列中尽快重试失败的作业。情况似乎并非如此。似乎失败的作业被推送,并将在队列中其他现有作业的后面处理。一个人为的例子:
这总是会在第一次处理后产生作业,然后重试失败的作业。根据公牛的说法,这不应该发生。我的实施错了吗?
node.js - Bullmq 手动重试已完成的作业
我正在使用 bullmq 发送 webhooks 事件。已安排作业并进行自动重试。假设我想重新执行一些已经成功完成的任务,并且我有想要重新安排的队列中元素的 ID,是否可以通过将这些任务移动到等待队列中手动将它们设置为“重复”以某种方式与redis?
node.js - NestJS Fastify Bull Board 集成
我正在尝试将 Bull Board 集成到 NestJS + Fastify 服务中。
bull-board.middleware.ts
app.module.ts
Bull Board 依赖于具有不同请求接口的 Express 应用程序。仪表板实际上是可访问的,但提供静态文件失败。 浏览器+控制台截图
我试过了:
- 应用
fistify-express
适配器 => 导致 NestJS 出错 - 提供传递
basePath | proxyPath: 'admin/queues'
给req
bullBoardMiddleware
有人可以建议如何使其工作。
先感谢您!
node.js - 因拆解不当而导致 Jest 测试泄漏
在使用 Jest 进行测试时,我收到一条警告说“工作进程未能正常退出并已被强制退出。这可能是由于不正确的拆卸导致测试泄漏造成的。尝试使用 --detectOpenHandles 运行以查找泄漏。” 我意识到这是因为在其中一个函数中我使用了使用 Redis的 Bull https://github.com/OptimalBits/bull 。因此,将任务添加到队列时会导致此警告。我使用默认的 Bull 配置(无配置)。我确实有一个 Jest 使用的队列上的 add 函数的模型,但是它没有帮助。
我想知道是否有办法避免这个警告。如果它有助于我在内存中使用 mongo 进行测试,但 redis 是一个实际的。作为一个旁注,当我单独运行每个测试套件时,我没有看到这个警告,只有当我运行所有测试时。
javascript - 无法对公牛队列进行速率限制
为了管理流量并有效处理特定消息,/我们实施了限速公牛队列:-但我们无法实现限速。这是我的实现,但此队列中的速率限制不起作用
}
}
node.js - 如何从公牛js中删除延迟的工作?
我是 Bull 的新手,我的用例是在 10 秒后运行作业,为此,我使用以下代码
将其添加到队列后,现在在几秒后让我们说 4 秒,我想从队列中删除作业,因为由于某些条件不再需要它,我该如何实现它。我知道有job.remove()。但是如何将它用于给定的jobId。有人可以帮我吗。
testing - NestJS Bull Queues:如何跳过测试环境中的处理?
我正在通过 Bull 使用 NestJS 队列并在 Jest 中编写单元测试。我想跳过测试期间触发的作业的处理。
Bull 的测试模式存在 GH 问题,但他们不会实施。
最好我会避免广泛的嘲笑,BullModule
最好是一个简单的选项。
javascript - 如何在部署到 Heroku 的 Node.js 环境中创建 Redis (Bull) 队列?
我查看了所有文档,但在找到正确实现的示例时遇到了一些麻烦。首先,我有 Heroku Redis 插件,如下所示:
https://i.stack.imgur.com/9kcXW.png
我将 Redis 和 Bull 安装到我的 Node.js 环境中,并按如下方式设置 Redis:
我正在尝试将以下函数作为后台任务运行(这是 Heroku 建议用于完成时间超过 0.5 秒的函数的方法):
这个函数做一些网页抓取、数据库调用和其他事情,所以就像我说的,它需要几秒钟才能完成。我应该如何更改我的函数以将请求添加到后台队列,然后将 JSON.stringified 'array' 返回给用户。抱歉,如果这是一个菜鸟 Redis 问题,但我查看了所有文档,我真的不知道如何继续。