首页 > 解决方案 > 算法:并行启动两个服务,但顺序运行它们

问题描述

我有两个服务,我想并行启动但按顺序运行。也就是说,服务 B 会在服务 A 运行时休眠,反之亦然。这些服务调用具有速率限制的外部 REST API。当服务达到其限制时,它将进入休眠状态。

我想实现这一点的一种天真的方法是让服务不断地轮询彼此的状态,但我可以想象遇到这样一个场景,即两个服务都发送一个sleep 状态并同时尝试start

编辑:服务在不同的机器/jvm 环境上运行。

编辑:速率限制是由 ip 地址

有任何想法吗 ?

标签: javaalgorithm

解决方案


假设每 20 秒轮询一次 API。

我会让服务互相发送“抑制”消息——让每个服务在启动时随机休眠几秒钟,然后第一个唤醒的服务会向另一个服务发送一条消息,说“我正在调用 API,不要在接下来的 30 秒内调用它”,然后轮询 API,如果没有达到限制,则休眠 20 秒,然后发送另一条消息并再次轮询 API,依此类推,直到达到限制。当达到限制时,第一个服务将休眠(比方说)5分钟,因此第二个服务将不再接收抑制消息,并将开始轮询API并向服务A发送抑制消息。当第一个服务完成睡眠时,它会寻找抑制消息,并且只有在没有收到消息时才开始轮询 API。


推荐阅读