问题描述
|
我们有一个JMS服务器,主要用于在两个框之间进行通信。在两个框上运行的(Tibco)进程基本上读取输入的XML,对其进行处理并将其转换为平面文件。每个XML将有30个平面文件(总大小的平面文件组合从1MB到10MB不等。在辅助盒上运行的进程需要将文件传输到主服务器。我看到两种选择-
SCP-Secure copy将复制30个平面文件
通过建立SCP连接(通过shell脚本执行)。
将文件作为JMS消息发送。在主JMS接收程序上
将读取这些内容并将平面文件与其他平面文件合并。
您认为哪个选项“更好”?如果辅助盒子每小时发出500个SCP,SCP会出现问题吗?在第二种选择中,JMS服务器将在某个临时位置存储平面文件吗?
谢谢
解决方法
我一定会投票赞成SCP解决方案。 JMS对于传输文件将是一个过大的杀伤力。使用JMS,您需要将文件读取到内存中,将其放入JMS消息中,以线化形式(可能会导致更大的数据大小)通过网络传输,然后反序列化然后再将其保存到文件中。同样,如果将JMS队列配置为持久性的,它还将为消息处理增加持久性存储开销。所有这些序列化/反序列化/持久性都会给您的JVM的垃圾收集器造成压力,并可能影响性能。
编辑:使用SCP解决方案,您基本上可以将文件数据从一台服务器流传输到另一台服务器。因此,几乎没有内存开销。尽管每小时传输30次总大小为10MB的文件500次可以使您每小时获得5Gb的传输量,但这确实很多。它给你约。每秒1.3Mb。你有这样的带宽吗?
但替代解决方案可以是仅按需传输文件。例如,仅在收到JMS时才启动传输。而且,您可以使用JSCH库而不是shell脚本来进行真正的传输。