系统应如何从远程第三方数据源获取数据?

时间:2013-12-18 16:20:31

标签: web-services sftp remote-access

供应商的远程系统拥有我们内部系统之一每天所需的数据。我们的系统目前每天通过供应商的系统通过SFTP推送CSV文件来接收数据。数据是< 1KB大小。

我们正在考虑改用SFTP。文件“应该”始终准备好不迟于定义的时间(5 ET)。因此,这种方法的一个问题可能是我们的系统可能必须进行一些轮询以最终获取文件。

系统应如何从远程第三方数据源获取数据?供应商还提供Web服务和订阅源服务。他们还会考虑我们获取数据的其他想法。

2 个答案:

答案 0 :(得分:1)

假设您的系统是类似unix的,而另一方有一个开放的SSH服务器,我会将应用程序运行的用户的公钥添加到远程端的authorized_keys文件中。在此之后,您的应用程序将能够通过运行

来轮询是否存在更新的文件
ssh username_at_remote_end@ip_address_of_remote stat -C %Z path_to_file

如果找不到文件,将在最后一次更改文件(如果找到)或错误(非零退出代码)的unix Epoch之后输出秒数。

要实际检索文件(在检查时间戳是否在过去24小时内之后),我会使用

t=$(mktemp -d) && scp username_at_remote_end@ip_address_of_remote:path_to_file $t && echo $t

将其复制到/tmp下的临时目录,只能由运行应用程序的用户读取,并返回该文件夹的名称。

所有编程语言都支持本地运行命令(在C中,使用system();在Java中,使用Process; ...)。为简单起见,每个命令都会添加到脚本文件中(例如poll.shretrieve.sh)。如果远程端发生变化,您只需更新&测试脚本。有openssh的直接接口,但如上所述,通过脚本将所有工作外包给bash可能更简单。

答案 1 :(得分:0)

如果您对多个案例有类似要求,可以考虑使用集成服务器(中间件)来实现此目的。在那里你可以设计一个触发器,它将在5 ET之后调用特定的拉力。 如果只有一种情况需要这样做,请向您的提供商咨询webservice选项。你可以在5ET之后通过发送数据的肥皂请求在5ET之后调用他的web服务,他将返回肥皂响应而不是csv。您可以在系统中轻松实现它。它将更加安全和有效。您将对数据,传输和安全性拥有更多控制权。