微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在集群中运行服务时出现重复的队列作业

如何解决在集群中运行服务时出现重复的队列作业

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

我有一个使用 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 服务运行。所以我做的第一个决定是为 Docker 服务使用 replicas: N 选项。但这里有一个问题:我想为 secondQueue 复制进程工作者,但我也复制了 firstQueue 侦听器,因此我从 firstQueue 读取了 N 次相同的消息。实际上,我只想接收一次消息并且只是并行化作业进程。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。