问题标签 [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.

0 投票
2 回答
1717 浏览

node.js - 在上一个作业完成之前不要处理下一个作业(BullJS/Redis)?

基本上,每个客户端(clientId与它们关联)都可以推送消息,重要的是,在第一个消息完成处理之前,不会处理来自同一客户端的第二条消息(即使客户端可以连续发送多条消息,并且它们是有序的,并且多个发送消息的客户端理想情况下不应相互干扰)。而且,重要的是,一个工作不应该被处理两次。

我认为使用 Redis 可能能够解决这个问题,我开始使用 Bull 库进行一些快速原型设计,但我显然做得不好,我希望有人知道如何继续。

这是我到目前为止所尝试的:

  1. 创建作业并将它们添加到一个进程的相同队列名称中,使用clientId作为作业名称。
  2. 在 2 个单独的进程上等待大量随机时间的同时消耗作业。
  3. 我尝试添加我正在使用的库提供的默认锁定 ( bull),但它锁定在 jobId 上,它对每个作业都是唯一的,而不是在 clientId 上。

我想要发生的事情:

  • clientId在前一个消费者完成处理之前,其中一个消费者不能从同一个消费者那里接手工作。
  • 但是,它们应该能够clientId毫无问题地(异步地)并行地从不同的 s 中获取项目。(我还没有走到这一步,我现在只处理一个clientId

我得到什么:

  • 两个消费者都从队列中消费尽可能多的项目,而无需等待前一个项目clientId完成。

Redis 甚至是适合这项工作的工具吗?

示例代码

这是使用 3 个不同的进程运行的,您可能会这样称呼它们(尽管我使用不同的选项卡来更清楚地了解正在发生的事情)

0 投票
1 回答
354 浏览

typescript - 如何遍历在 NestJs Bull 中注册的所有队列?

我想遍历在 NestJs Bull 中注册的所有队列并对每个队列做一些事情。

例如我已经有了这个:

但我想做这样的事情:

似乎我只能使用队列名称一次进入队列,并且只能使用 @Inject 装饰器。有没有其他的排队方式?

0 投票
0 回答
65 浏览

queue - Bull Queue 重试被推到尾部,而不是头部

使用公牛队列。我有一个限速队列。考虑到速率限制和退避策略,我希望在队列中尽快重试失败的作业。情况似乎并非如此。似乎失败的作业被推送,并将在队列中其他现有作业的后面处理。一个人为的例子:

这总是会在第一次处理后产生作业,然后重试失败的作业。根据公牛的说法,这不应该发生。我的实施错了吗?

0 投票
0 回答
280 浏览

node.js - Bullmq 手动重试已完成的作业

我正在使用 bullmq 发送 webhooks 事件。已安排作业并进行自动重试。假设我想重新执行一些已经成功完成的任务,并且我有想要重新安排的队列中元素的 ID,是否可以通过将这些任务移动到等待队列中手动将它们设置为“重复”以某种方式与redis?

0 投票
0 回答
582 浏览

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'reqbullBoardMiddleware

有人可以建议如何使其工作。

先感谢您!

0 投票
1 回答
11515 浏览

node.js - 因拆解不当而导致 Jest 测试泄漏

在使用 Jest 进行测试时,我收到一条警告说“工作进程未能正常退出并已被强制退出。这可能是由于不正确的拆卸导致测试泄漏造成的。尝试使用 --detectOpenHandles 运行以查找泄漏。” 我意识到这是因为在其中一个函数中我使用了使用 Redis的 Bull https://github.com/OptimalBits/bull 。因此,将任务添加到队列时会导致此警告。我使用默认的 Bull 配置(无配置)。我确实有一个 Jest 使用的队列上的 add 函数的模型,但是它没有帮助。

我想知道是否有办法避免这个警告。如果它有助于我在内存中使用 mongo 进行测试,但 redis 是一个实际的。作为一个旁注,当我单独运行每个测试套件时,我没有看到这个警告,只有当我运行所有测试时。

0 投票
0 回答
563 浏览

javascript - 无法对公牛队列进行速率限制

为了管理流量并有效处理特定消息,/我们实施了限速公牛队列:-但我们无法实现限速。这是我的实现,但此队列中的速率限制不起作用

}

}

0 投票
2 回答
1073 浏览

node.js - 如何从公牛js中删除延迟的工作?

我是 Bull 的新手,我的用例是在 10 秒后运行作业,为此,我使用以下代码

将其添加到队列后,现在在几秒后让我们说 4 秒,我想从队列中删除作业,因为由于某些条件不再需要它,我该如何实现它。我知道有job.remove()。但是如何将它用于给定的jobId。有人可以帮我吗。

0 投票
2 回答
1412 浏览

testing - NestJS Bull Queues:如何跳过测试环境中的处理?

我正在通过 Bull 使用 NestJS 队列并在 Jest 中编写单元测试。我想跳过测试期间触发的作业的处理。

Bull 的测试模式存在 GH 问题,但他们不会实施。

最好我会避免广泛的嘲笑,BullModule最好是一个简单的选项。

0 投票
1 回答
2362 浏览

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 问题,但我查看了所有文档,我真的不知道如何继续。