如何解决在集群中运行服务时出现重复的队列作业
我是分布式队列系统的新手,所以我想我的问题可能很奇怪。不过真的很希望能找到解决办法。
我有一个使用 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 举报,一经查实,本站将立刻删除。