微服务架构任务系统问题

Microservices architecture tasks system problem

此时此刻,我正在使用微服务架构编写我的新应用程序。我的应用程序将做什么的简短说明如下:

我目前正在苦苦挣扎的是,我希望微服务 A 再次开始对微服务 C 处理过的产品进行抓取。为此,我想到了某种任务系统,其中每个产品都被抓取也有一个链接到它们的任务 ID。我目前唯一的问题是:

我想问的是,如果有人有关于如何在我的微服务中 improve/implement 这样的系统的方法或技巧。每个产品都需要在前一个产品完成后立即被刮掉。目前微服务 A 只是检查它是否可以找到产品的 运行 任务,具有 setInterval.

所有这些都是在 NodeJS 中开发的,所有信息都保存在 MongoDB 数据库中。微服务之间的通信是通过rabbitMQ完成的。

非常感谢任何帮助。

我想对这个架构补充两点。似乎每个微服务都会根据时间改变数据状态,但数据源是相同的。

1.为什么不更改每个微服务 [state] 的数据状态?

目前您正在为您开始的一项工作使用布尔值 running:true。 我们可以将其更改为 ['scrapping', 'compare', 'notify']

{
    ...
    status : 'scrapping',
    jobId : 23,
    ...
}

现在,当数据最后到达微服务 C 时,它可以为消费者发布状态为 'notify' 的新作业 微服务 A,A 可以有条件地处理这种情况,并在需要时重新报废。 另一个好处是每个微服务都可以根据工作状态有条件地识别工作 以及。因此在任何失败或重启的情况下,每个微服务只会执行一个任务 如果它符合它的标准。例如,微服务 B 不会启动一个没有 scrapping 作为状态。 基本上,只有在使用 channel.ack(message).

完成后才承认你的工作

2.Data同步

我不建议创建多个 B 微服务作为消费者,这可能会有问题 在数据同步中[同时多个消费者 B,在不同产品的同一页面上工作] 或者,您可以衡量每页的产品列表 通过一些测试相应地调整您的队列配置(但队列不要太长,因为这会降低速度并影响性能 或将它们捆绑为一个作业并发送以供处理。

探索更多: