【发布时间】:2016-09-10 23:25:07
【问题描述】:
问题:我有许多通过 HTTP 并行上传的文件(上传接收器)。我将它们临时存储在本地磁盘上。另一个进程(上传提交者)收到有关新上传的通知并进行特定处理(解析、提取元数据、上传到 S3 等)。上传处理完成后,我希望提交者通知上传接收者向远程上传者回复状态(提交是否正常或错误)。使用 ZeroMQ PUB/SUB 模式,会更好:
- 将所有上传接收线程订阅到单个主题。每个 接收者线程必须根据上传 ID 过滤消息或 找到属于它的通知。
- 为每个接收者线程订阅一个新主题,该主题代表 具体上传。假设主题是,这似乎更合理 ZeroMQ 很便宜,即不需要太多资源来保存它们,它们 可以自动过期。我预计新的上传量会达到几十 文件每秒,单次上传处理可能需要几个 秒,所以理论上我可以有多达数千个活动主题 在同一时间。而且我可能并不总是能够 由于各种故障模式退订。
【问题讨论】:
-
免责声明:我很累,所以如果我漫无边际,请原谅我,但异步请求-回复不会比 pub-sub 更适合您的用例,因为您无法确定这一事实你会取消订阅吗?关于主题 - 订阅很便宜,但没有什么是无限的,如果你不能清理,你一定会在某个时候被搞砸。
-
关于您的提议,
REQ/REP方案在用例中非常危险,其中选定的传输类以及其他故障点会增加消息/信号传递的不确定性级别(主要的REQ/REP原型很容易陷入它自己的、不可挽救的 FSA 死锁)。如果有兴趣,可以查看其他关于REQ/REPFinite-State-Automaton 自锁风险的帖子>>>stackoverflow.com/a/38163015/3666197。