我有两个服务,我想以并行方式启动,但是按顺序运行。也就是说,服务B将在服务A运行时休眠,反之亦然。这些服务调用具有速率限制的外部REST API。当服务达到极限时,它就会进入睡眠状态。
我认为实现这一目标的一种天真的方法是让服务连续轮询彼此的状态,但我可以想象遇到两个服务都发送sleep
状态并同时尝试start
的情况。 / p>
编辑:服务在不同的机器/ jvm环境中运行。
编辑:速率限制是通过IP地址
有什么想法吗?
答案 0 :(得分:1)
假设API每20秒轮询一次。
我会让服务向对方发送'抑制'消息 - 让每个服务在启动时随机几秒钟休眠,然后第一个唤醒向另一个服务发送消息说“我正在调用API,不要在接下来的30秒内调用它“,然后轮询API,如果它没有达到限制,则休眠20秒,然后发送另一条消息并再次轮询API,依此类推,直到达到限制。达到限制时,第一个服务将休眠(比方说)5分钟,因此第二个服务将不再接收抑制消息,并将开始轮询API并向服务A发送抑制消息。当第一个服务完成休眠时,它会查找抑制消息,并且只在未接收到API时才开始轮询API。