我是使用分布式队列系统的新手,所以我想我的问题可能很奇怪。但真的希望能找到解决办法。
我有一个使用Bull Queue的 Node.js 微服务。该服务与 2 个队列一起工作:它订阅并在获取消息时firstQueue
为 生成作业。secondQueue
的返回值firstQueue
包含 的多个作业的数据secondQueue
。所以我制作这样的工作:
firstQueue.on('global:completed', async (jobId, returnValue) => {
const data = JSON.parse(returnValue);
for (const task of data) {
secondQueue.add(task, jobSettings);
}
});
我secondQueue
在同一服务中有流程工作者:
const workerProcess = require('./workerProcess');
firstQueue.process(workerProcess);
它运作良好,但我想secondQueue
并行处理这些任务。微服务在 Docker Swarm 模式下作为 Docker 服务运行。所以我做出的第一个决定是使用replicas: N
Docker 服务选项。但这里有一个问题:我想要复制进程工作者secondQueue
,但我也得到复制的侦听器,因此我从N 次中firstQueue
读取了相同的消息。firstQueue
实际上,我只想接收一次消息并并行化作业流程。
我认为,使用replicas
Docker 服务选项对我没有帮助。而且我不知道如何实现我想要的。有一些方法/模式可以做到这一点吗?或者我为我的微服务选择了错误的架构?