我正在开展一个网站需要与其他系统交换复杂和机密(以及加密)数据的项目。数据包括个人信息,技术图纸,公共文件等。
我们宁愿避免依赖系统的请求 - 回复模式(并且有很多),因为这会产生大量的空流量。
另一方面,我不确定纯粹的发布者/订阅者模式是否合适 - 主要是因为要交换的数据的复杂和庞大的性质。
出于这个原因,我们讨论了“发布/订阅/请求”解决方案的可能性。发布/订阅部分将向依赖系统发布消息,即可以提取某些内容。然后,通过旧式请求 - 回复操作来获取实际内容。
这听起来怎么样?
此致 的Morten
答案 0 :(得分:3)
如果系统始终在线,则听起来良好。
您可能希望查看PubSubHubbub,因为: 1.不解决已经解决的问题2.它是可扩展的,代表了一个很好的关注点分离。
涉及3方:
它的工作方式如下:
协议本身是Atom的扩展,但它似乎符合您的要求,例如新的Atom'内容'可以是包含新发布文档的URL的项目(可以单独下载)。
新/修改过的文件=> Feed中新增/修改的项目,包含要获取的网址=> Hub =>订阅者=>从Publisher
中提取文档答案 1 :(得分:3)
我对此没有很好的体验,但是消息队列应该可以帮助您完成所需的工作。我正在使用这样的系统,同时从后端管理向多个前端客户端发布数据。
如果客户端处于关闭状态,则不会消耗数据,并且服务器不会收到对所接收数据的确认。一旦客户端重新联机,他就会消耗数据,并且在队列清除后仍然会收听更多消息。并且发布者收到了消费数据的确认。通过这种方式,我们可以识别并通知接收端有问题的人作为奖励。你可以这样做吗?
答案 2 :(得分:1)
如果从属系统始终在线,则此方法有效 - 您无法向在晚上/周末关闭的PC发送消息。
因此,如果客户端是全天候运行的服务器,则可行。否则,尝试这种方法:
这有几个好处:
select client, count(*) group by client having count(*) > 10
会告诉您有关问题的信息。编辑离线订阅者的问题是他们不知道他们遗漏了什么。因此发送方需要跟踪失败的推/拉请求。这意味着您必须实现我建议的伪代码,以确保可以恢复断开的连接。