[英]Microservices architecture tasks system problem
此刻,我正在编写具有微服务架构的新应用程序。 我的应用程序将做什么的简短说明如下:
running: true
任务的产品,它会抓取产品并创建一个带running: true
的新任务。running: false
我目前正在苦苦挣扎的是,我希望微服务 A 重新开始对微服务 C 处理过的产品进行抓取。为此,我想到了某种任务系统,其中每个抓取的产品也有一个任务 ID与他们联系在一起。 我目前遇到的唯一问题是:
我想问的是,如果有人有关于如何在我的微服务中改进/实现这样一个系统的方法或技巧。 每个产品都需要在前一个产品完成后立即刮掉。 目前微服务 A 只是检查它是否可以使用 setInterval 找到产品的正在运行的任务。
所有这些都是在 NodeJS 中开发的,所有信息都保存在 MongoDB 数据库中。 微服务之间的通信是通过rabbitMQ完成的。
很感谢任何形式的帮助。
我想为这个架构添加两点。 似乎每个微服务都会随着时间改变数据的状态,但数据源是相同的。
1. 为什么不在每个微服务[state]处改变数据状态?
现在,您正在为您开始running:true
一项作业使用布尔值running:true
。 我们可以将其更改为['scrapping', 'compare', 'notify']
{
...
status : 'scrapping',
jobId : 23,
...
}
现在,当数据最后是微服务 C 时,它可以为消费者微服务 A 发布一个状态为“通知”的新作业,A 可以有条件地处理这种情况,并在需要时进行回收。 另一个好处是每个微服务也可以有条件地识别基于作业状态的作业。 因此,在任何失败或重启的情况下,每个微服务只会执行符合其标准的任务。 例如,微服务 B 不会启动一个没有scrapping
状态的工作。 基本上,只有在使用channel.ack(message)
完成后才确认您的工作。
2.数据同步
我不建议创建多个 B 微服务作为消费者,数据同步可能存在问题[而多个消费者 B,在同一页面上使用不同的产品] 或者,您可以测量每页的产品列表,相应地调整您的队列配置进行一些测试(但不要排队太长,因为这会降低速度并影响性能,或者将它们捆绑为一项作业并将其发送进行处理。
探索更多:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.