【发布时间】:2020-12-16 00:05:57
【问题描述】:
此时我正在编写具有微服务架构的新应用程序。我的应用程序将执行的操作的简要说明如下:
- 微服务 A 会抓取多个电商商品页面,并将所有抓取的商品一一发送到我的下一个微服务,从现在开始我将其称为 B。对于每个 no 带有
running: true的任务的产品,它会抓取该产品并创建一个带有running: true的新任务。 - 微服务 B 将处理它接收到的每个产品(更新我的数据库中的数据),并将所有与数据库相比发生变化的数据发送到我的下一个微服务,从现在开始我将其称为 C。
- 微服务 C 收到更改的产品并向我的 discord & slack 频道发送消息。完成后,它将将此产品的运行任务设置为
running: false
我目前正在苦苦挣扎的是,我希望微服务 A 再次开始对微服务 C 处理过的产品进行抓取。为此,我想到了某种任务系统,其中每个被抓取的产品也有链接到它们的任务 ID。我目前唯一的问题是:
- 任务可能会冻结/失败或其他情况。为了解决这个问题,我有仍在运行的任务(数据库中的变量)并且已经在 5 分钟前开始,自动停止。这在我看来并不理想,因为这意味着一项任务可能需要 5 分钟才能完成。
- 由于每个被抓取的产品都被分配了一项任务,因此我必须快速部署大量微服务 B 才能正确处理所有负载。
我想问的是,如果有人有关于如何在我的微服务中改进/实施这样一个系统的方法或提示。每个产品都需要在前一个产品完成后立即进行刮擦。目前微服务 A 只是检查它是否可以通过 setInterval 找到产品的运行任务。
所有这些都是在 NodeJS 中开发的,所有信息都保存在 MongoDB 数据库中。微服务之间的通信是通过rabbitMQ完成的。
非常感谢任何帮助。
【问题讨论】:
-
很少查询,1.当A空闲时,它会再次处理C完成的任务,基本上在任务系统中状态为{running:false,id:123},你提到你正在努力争取这个权利并且只需要关于这个或整体的推荐/最佳方法吗? 2. 在最后几行中,您提到 m(A) 检查
running : true以查找要报废的产品数据。但是,如果要处理已完成的任务,为什么要检查正在运行的任务呢?第1点和第2点对我来说似乎是一个悖论,你能澄清一下吗? -
@bron10 感谢您的评论。我已经编辑了关于这个的问题。总的来说,我想要一些关于这个问题的建议/最佳方法。
标签: node.js mongodb rabbitmq microservices