我有一台服务器正在向其他服务器发送命令,并且我想设计一个确认系统,以便我的服务器知道命令是否已执行。
在大多数情况下,这很容易,当命令完成或异常终止时,另一台服务器可以仅发送回一条消息。
我遇到的问题是如果其中一台服务器在收到命令后脱机怎么办?其中一些命令可能需要很长时间才能执行(例如20分钟)。而且,如果服务器从崩溃中恢复,它将不会继续执行命令。
因此,这意味着我不能只保留未确认命令的队列,如果经过一定时间后就认为它们失败,因为根据情况,这些命令可能需要很长时间。
我也不能仅对服务器进行ping操作以查看它们是否健康,因为它们可能已从崩溃中恢复。
当前,也无法检查服务器的当前活动。
理想情况下,我想避免轮询以减少开销。
是否有任何适用的设计模式?
现在,我真正想到的唯一方法是保留一份发送但未确认的命令列表。然后,定期为每个命令ping目标服务器,以查看服务器是否已启动并仍在执行命令。但是,此方法随后需要轮询方法和当前活动api的其他设计。有没有更好,更优雅的方法来做到这一点?