1

我是使用分布式队列系统的新手,所以我想我的问题可能很奇怪。但真的希望能找到解决办法。

我有一个使用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: NDocker 服务选项。但这里有一个问题:我想要复制进程工作者secondQueue,但我也得到复制的侦听器,因此我从N 次中firstQueue读取了相同的消息。firstQueue实际上,我只想接收一次消息并并行化作业流程。

我认为,使用replicasDocker 服务选项对我没有帮助。而且我不知道如何实现我想要的。有一些方法/模式可以做到这一点吗?或者我为我的微服务选择了错误的架构?

4

0 回答 0