我有一个场景,我有一个客户端需要同时在x worker上运行异步任务(每个worker在远程机器上都有一个ZeroMQ套接字绑定)。
因此,这将是对多个端点的单个请求:
10.0.0.7 REQ ----> 10.0.0.2, 10.0.0.3, 10.0.04 (Task)
每个端点都会在完成后发回进度和最终结果。
10.0.0.2 REP ----> 10.0.0.7 (25%)
10.0.0.2 REP ----> 10.0.0.7 (50%)
10.0.0.3 REP ----> 10.0.0.7 (45%)
10.0.0.3 REP ----> 10.0.0.7 (75%)
10.0.0.4 REP ----> 10.0.0.7 (45%)
10.0.0.2 REP ----> 10.0.0.7 (Result)
10.0.0.3 REP ----> 10.0.0.7 (Result)
10.0.0.4 REP ----> 10.0.0.7 (Result)
10.0.0.7 - Save all results received
因此,相同的逻辑任务应该在x机器上同时运行,然后每台机器应该发回几个进度回复,然后是计算该特定任务的最终结果。收到所有机器的所有结果后,结果应存储在客户端上,逻辑任务完成。
到目前为止,我已经找到了ZeroMQ的以下可能方法:
此外,客户端应该能够在特定的盒子上停止重启任务,因此它不一定是工作者的单个REQ(可以有额外的REQ重启等)。
所有方法当然都包括一些可靠性机制和正确的错误处理。
不确定哪种方法最优。我想知道是否有人在ZeroMQ中实现了类似的东西,建筑推荐是什么?