AMQ 具有使用MQ进行文件传输的功能。它具有不限制传输文件大小、断点续传、多线程传输、高可靠性、简单易用等特点。
AMQ 的文件传输的模型如下图所示:
进行文件发送之前,发送端(图中的Sender)必须先登录到本地的服务器(图中的RouterA)。发送文件时发送端首先将文件上传到本地服务器上,本地服务器再将文件传输到远程的目的服务器(图中的RouterB),然后接收端(图中的Receiver) 在接收文件之前也必须先登录到目的服务器上(图中的RouterB),查看已接收的文件,然后再将具体的文件接收到本地机器。这样就达到利用MQ网络进行可靠的文件传输的目的。
在使用 AMQ 进行文件传输的过程中,文件的远程目的服务器不必在本地服务器能够连通的情况下发送客户端才能够发送文件,只要发送客户端能够登录上本地服务器,就能够将文件上传到本地服务器上,本地服务器会保存文件直到远程的目的服务器能够连通,才将文件传输到目的服务器,而且即使在传输过程中出现了网络中断或者服务器宕机,文件都会被保存在MQ网络上,直到最终将文件完全传送到目的服务器上,整个过程就像发送一个消息一样,MQ服务器会保证传输的可靠性,安全性。在发送客户端或者接收客户端发送或者接收文件的时候即使出现了网络中断或者服务器宕机,网络重新连接或者重启服务器之后通过断点续传功能,客户端还是能够再继续发送或者接收文件,直到文件被完全发送或者接收了。
AMQ 提供了一套进行文件传输的客户端API,使用该套API可以方便地在不同的MQ节点间传输文件,而且在API级别提供了传输文件时的断点续传、多线程传输、删除传输文件等功能,从而让开发人员可以通过这套API在应用程序中方便地使用 AMQ 进行文件传输。
该API主要由五个接口和一个工厂类组成,它们分别是:IFileSender接口、IFileReceiver接口、IFileSenderListener接口、IFileReceiverListener接口、IFileTransportManager接口和FileTransporterObjectFactory类。
IFileSender是用于向远程MQ节点发送文件的接口。该接口的详细说明如下:
package com.apusic.jms.client.file.transport;
/**
* 该接口是用于向远程MQ节点发送文件的接口。
* 发送器的Send和continueSend方法只允许一次一个线程进入,也就是说假如已经有一个线程调用了Send
* 或者continueSend方法,使发送器处于发送的状态,另外一个线程调用Send或者continueSend方法将会
* 抛出异常。
*/
public interface IFileSender {
/**
* 发送器状态常量:
* 1) STATE_STARTING_SENDING 常量表示文件发送器正在准备向远程节点发送文件。
* 2) STATE_SENDING 常量表示文件发送器正在向远程节点发送文件,处于发送状态。
* 3) STATE_STOPPING_SENDING 常量表示文件发送器正在准备停止向远程节点发送文件。
* 4) STATE_IDLE 常量表示文件发送器处于空闲状态,可以使用。
*/
public static final String STATE_STARTING_SENDING = "StartingSending";
public static final String STATE_SENDING = "Sending";
public static final String STATE_STOPPING_SENDING = "StoppingSending";
public static final String STATE_IDLE = "Idle";
/**
* 向远程节点发送一个文件,发送信息由FileSendingInfo类的对象指定,通过该对象可以指定:
* 1) 要发送的文件在本地机器的路径。
* 2) 文件的备注,在接收端可以根据备注辨别不同的文件。
* 3) 文件的目的节点的路由名。
* 4) 传输文件时要启动多少线程对文件的不同块同时进行传输。
* 调用该方法之后,方法将会阻塞调用的线程,直到文件发送完毕、取消了发送或者发送文件时出现异常。
* 方法返回之后,将会得到发送结果,发送结果中包含了以下内容:
* 1) 文件是否已经发送完毕,发送完毕了为true,否则为false。
* 2) 发送时是否产生了异常,假如该结果不为null即表示产生了异常。
* 3) 唯一标识该发送的文件的UUID,假如文件没有发送完毕,下次要断点续传,继续发送该文件,要
* 给出该UUID,在服务器上标识该发送的文件,将内容继续传递到该文件中。
* @param info
* 要发送的文件的信息。
* @return
* 发送结果。
* @throws SendFileException
* 假如在发送的准备阶段发生了错误,将抛出该异常,异常信息中说明了错误的原因。
*/
public FileSendingResult send(FileSendingInfo info) throws SendFileException;
/**
* 断点续传,继续发送某个没有发送完的文件,发送的信息由ContinueSendingInfo类的对象指定,通过该对象可以指定:
* 1) 要继续发送的文件在本地机器的路径,假如通过该路径指定的文件与原先已经发送了一部分的文件不是
* 同一个文件的话,将会抛出异常。
* 2) 原先已经发送了一部分的文件的UUID,通过该UUID在服务器上标识要继续传输的文件。
* 调用该方法之后,方法将会阻塞调用的线程,直到文件发送完毕、取消了发送或者发送文件时出现异常。
* 方法返回之后,将会得到发送结果。
* @param info
* 要继续发送的文件的信息。
* @return
* 发送结果。
* @throws SendFileException
* 假如在继续发送的准备阶段发生错误,将抛出该异常,异常信息中说明了错误的原因。
*/
public FileSendingResult continueSend(ContinueSendingInfo info) throws SendFileException;
/**
* 取消当前的发送,方法调用之后阻塞等到所有的后台发送线程停止发送。
* 在所有的后台发送线程停止发送,发送器处于STATE_IDLE状态之后,发送
* 器会调用注册在该发送器中的IFileSenderListener对象的onAfterSendingStoped
* 方法。
* @throws SendFileException
* 假如发送器处于STATE_IDLE状态,将会抛出该异常。
*/
public void cancelCurrentSending() throws SendFileException;
/**
* 得到发送器当前正在发送的文件的大小,单位是字节。
* @return 发送器当前正在发送的文件的大小。
* @throws SendFileException
* 假如发送器不是处于STATE_SENDING状态,将会抛出该异常。
*/
public long getCurrentSendingFileSize() throws SendFileException;
/**
* 得到发送器当前正在发送的文件已经被发送出去的字节数。
* @return 发送器当前正在发送的文件已经被发送出去的字节数。
* @throws SendFileException
* 假如发送器不是处于STATE_SENDING状态,将会抛出该异常。
*/
public long getFileSendedSize() throws SendFileException;
/**
* 得到发送器当前的状态,返回值如下:
* 1) STATE_STARTING_SENDING 常量表示文件发送器正在准备向远程节点发送文件。
* 2) STATE_SENDING 常量表示文件发送器正在向远程节点发送文件,处于发送状态。
* 3) STATE_STOPPING_SENDING 常量表示文件发送器正在准备停止向远程节点发送文件。
* 4) STATE_IDLE 常量表示文件发送器处于空闲状态,可以使用。
* @return 发送器当前的状态。
*/
public String getFileSenderCurrentState();
/**
* 向发送器增加一个监听器对象,用于监听发送器的状态变化。
* @param listener
* 要添加的监听器对象,该对象的类必须实现IFileSenderListener接口。
* @throws SendFileException
* 假如发送器不是处于STATE_IDLE状态,将会抛出该异常。
*/
public void addFileSenderListener(IFileSenderListener listener) throws SendFileException;
/**
* 从发送器中删除一个监听器对象。
* @param listener
* 要删除的监听器对象。
* @throws SendFileException
* 假如发送器不是处于STATE_IDLE状态,将会抛出该异常。
*/
public void removeFileSenderListener(IFileSenderListener listener) throws SendFileException;
/**
* 清空发送器的所有监听器对象。
* @throws SendFileException
* 假如发送器不是处于STATE_IDLE状态,将会抛出该异常。
*/
public void clearAllFileSenderListeners() throws SendFileException;
}
IFileSenderListener是用于监听发送器的状态变化的接口。该接口的详细说明如下:
package com.apusic.jms.client.file.transport;
/**
* 该接口是用于监听发送器的状态变化的接口,实现该接口的类的对象可以注册到发送器中,并监听所注册的
* 发送器的状态变化。
*/
public interface IFileSenderListener {
/**
* 当发送器准备完毕,开始发送文件的时候会调用监听器的该方法。
* 调用该方法之前,发送器已经处于STATE_SENDING状态。
* @param sender
* 发生该状态变化的发送器。
*/
public void onAfterSendingStarted(IFileSender sender);
/**
* 当发送器准备停止发送文件,在停止之前会调用监听器的该方法。
* 调用该方法的时候,发送器还不是处于STATE_IDLE状态。
* @param sender
* 发生该状态变化的发送器。
*/
public void onBeforeSendingStoped(IFileSender sender);
/**
* 当发送器已经停止了发送文件,会调用监听器的该方法。
* 调用该方法的时候,发送器已经处于STATE_IDLE状态。
* @param sender
* 发生该状态变化的发送器。
*/
public void onAfterSendingStoped(IFileSender sender);
}
IFileReceiver是用于从已登录的MQ节点上接收某个具体文件的接口。该接口的详细说明如下:
package com.apusic.jms.client.file.transport;
/**
* 该接口是用于从已登录的MQ节点上接收某个具体文件的接口。
* 接收器的receive方法只允许一次一个线程进入,也就是说假如已经有一个线程调用了receive
* 方法,使接收器处于接收的状态,另外一个线程调用receive方法将会抛出异常。
*/
public interface IFileReceiver {
/**
* 接收器状态常量:
* 1) STATE_STARTING_RECEIVING 常量表示文件接收器正在准备从已登录的节点上接收文件。
* 2) STATE_RECEIVING 常量表示文件接收器正在从已登录的节点上接收文件,处于接收状态。
* 3) STATE_STOPPING_RECEIVING 常量表示文件接收器正在准备停止从已登录的节点上接收文件。
* 4) STATE_IDLE 常量表示文件接收器处于空闲状态,可以使用。
*/
public static final String STATE_STARTING_RECEIVING = "StartingReceiving";
public static final String STATE_RECEIVING = "Receiving";
public static final String STATE_STOPPING_RECEIVING = "StoppingReceiving";
public static final String STATE_IDLE = "Idle";
/**
* 从已登录的MQ节点上接收一个文件,无论是新接收一个文件还是继续接收已经接收了部分的文件,都使用该方法。
* 接收的文件的信息由FileReceivingInfo类的对象指定,通过该对象可以指定:
* 1) 文件要存放到的本地机器的路径,该路径是一个目录,假如将接收一个新的文件,新接收的文件会存放到该
* 目录中,在接收的过程中会在该目录下创建一个后缀名为“.tfcfg”的文件,该文件用于保存文件接收时的信息,假
* 如文件只接收到一半即停止了,下次继续断点续传的接收该文件时,还是调用该方法,而且文件要存放到的本地机器
* 的路径必须指定为只接收到一半的文件所在目录的路径,继续接收时会读取后缀名为“.tfcfg”的配置文件,得到接收信
* 息继续接收文件。
* 2) 要接收的文件的UUID,无论是新接收一个文件还是继续接收已经接收了部分的文件,都必须给出文件在服务器上的UUID。
* 调用该方法之后,方法将会阻塞调用的线程,直到文件接收完毕、取消了接收或者接收文件时出现异常。
* 方法返回之后,将会得到接收结果,接收结果中包含了以下内容:
* 1) 文件是否已经接收完毕,接收完毕了为true,否则为false。
* 2) 接收时是否产生了异常,假如该结果不为null即表示产生了异常。
* @param info
* 要接收的文件的信息。
* @return
* 接收结果。
* @throws ReceiveFileException
* 假如在接收的准备阶段发生了错误,将抛出该异常,异常信息中说明了错误的原因。
*/
public FileReceivingResult receive(FileReceivingInfo info) throws ReceiveFileException;
/**
* 取得接收的文件的接收信息,接收信息中包含了以下内容:
* 1) 接收的文件的大小,单位是字节。
* 2) 文件已经被接收的字节数。
* 3) 接收的文件的文件名。
* 4) 接收的文件的UUID。
* 5) 接收文件的用户的用户UUID,当一个文件第一次被用户接收之后,即为该用户产生一个用户UUID,并保存在文件
* 接收信息的配置文件和服务器上,当文件接收中断之后,下次再继续接收该文件时只能由具有该用户UUID的用户
* 继续接收,假如文件已经被接收了,其他用户将不能再接收该文件。
* 当接收器处于STATE_IDLE状态的时候,调用该方法时,FileReceivingInfo参数必须指定所接收的文件在本地机器
* 保存的路径,接收器将会读取跟该接收的文件相关的接收信息配置文件(即是后缀名为“.tfcfg”的配置文件),然后作
* 为信息返回,假如接收器处于STATE_RECEIVING状态,FileReceivingInfo参数可以不指定接收文件保存的路径,
* 接收器直接返回正在接收的文件的接收信息。
* @param info
* 要询问的接收文件的信息。
* @return
* 文件的接收信息。
* @throws ReceiveFileException
* 当接收器不处于STATE_IDLE或者STATE_RECEIVING状态的时候,或者获取文件接收信息错误的时候将
* 会抛出该异常,异常信息中包含了错误的原因。
*/
public FileReceivingConfig getFileReceivingConfig(FileReceivingInfo info) throws ReceiveFileException;
/**
* 取消当前的接收,方法调用之后阻塞等到所有的后台接收线程停止接收。
* 在所有的后台接收线程停止接收,接收器处于STATE_IDLE状态之后,接收
* 器会调用注册在该接收器中的IFileReceiverListener对象的onAfterReceivingStoped
* 方法。
* @throws ReceiveFileException
* 假如发送器处于STATE_IDLE状态,将会抛出该异常。
*/
public void cancelCurrentReceiving() throws ReceiveFileException;
/**
* 得到接收器当前正在接收的文件的大小,单位是字节。
* @return 接收器当前正在接收的文件的大小。
* @throws ReceiveFileException
* 假如接收器不是处于STATE_RECEIVING状态,将会抛出该异常。
*/
public long getCurrentReceivingFileSize() throws ReceiveFileException;
/**
* 得到接收器当前正在接收的文件已经被接收的字节数。
* @return 接收器当前正在接收的文件已经被接收的字节数。
* @throws ReceiveFileException
* 假如接收器不是处于STATE_RECEIVING状态,将会抛出该异常。
*/
public long getFileReceivedSize() throws ReceiveFileException;
/**
* 得到接收器当前的状态,返回值如下:
* 1) STATE_STARTING_RECEIVING 常量表示文件接收器正在准备从已登录的节点上接收文件。
* 2) STATE_RECEIVING 常量表示文件接收器正在从已登录的节点上接收文件,处于接收状态。
* 3) STATE_STOPPING_RECEIVING 常量表示文件接收器正在准备停止从已登录的节点上接收文件。
* 4) STATE_IDLE 常量表示文件接收器处于空闲状态,可以使用。
* @return 接收器当前的状态。
*/
public String getFileReceiverCurrentState();
/**
* 向接收器增加一个监听器对象,用于监听接收器的状态变化。
* @param listener
* 要添加的监听器对象,该对象的类必须实现IFileReceiverListener接口。
* @throws ReceiveFileException
* 假如接收器不是处于STATE_IDLE状态,将会抛出该异常。
*/
public void addFileReceiverListener(IFileReceiverListener listener) throws ReceiveFileException;
/**
* 从接收器中删除一个监听器对象。
* @param listener
* 要删除的监听器对象。
* @throws ReceiveFileException
* 假如接收器不是处于STATE_IDLE状态,将会抛出该异常。
*/
public void removeFileReceiverListener(IFileReceiverListener listener) throws ReceiveFileException;
/**
* 清空接收器的所有监听器对象。
* @throws ReceiveFileException
* 假如接收器不是处于STATE_IDLE状态,将会抛出该异常。
*/
public void clearAllFileReceiverListener() throws ReceiveFileException;
}
IFileReceiverListener是用于监听发送器的状态变化的接口。该接口的详细说明如下:
package com.apusic.jms.client.file.transport;
/**
* 该接口是用于监听接收器的状态变化的接口,实现该接口的类的对象可以注册到接收器中,并监听所注册的
* 接收器的状态变化。
*/
public interface IFileReceiverListener {
/**
* 当接收器准备完毕,开始接收文件的时候会调用监听器的该方法。
* 调用该方法之前,接收器已经处于STATE_RECEIVING状态。
* @param receiver
* 发生该状态变化的接收器。
*/
public void onAfterReceivingStarted(IFileReceiver receiver);
/**
* 当接收器准备停止接收文件,在停止之前会调用监听器的该方法。
* 调用该方法的时候,接收器还不是处于STATE_IDLE状态。
* @param receiver
* 发生该状态变化的接收器。
*/
public void onBeforeReceivingStoped(IFileReceiver receiver);
/**
* 当接收器已经停止了接收文件,会调用监听器的该方法。
* 调用该方法的时候,接收器已经处于STATE_IDLE状态。
* @param receiver
* 发生该状态变化的接收器。
*/
public void onAfterReceivingStoped(IFileReceiver receiver);
}
IFileTransportManager是用于对MQ服务器上的文件传输服务进行管理的接口。该接口的详细说明如下:
package com.apusic.jms.client.file.transport;
import java.util.Collection;
import com.apusic.util.Uuid;
/**
* 该接口是用于对MQ服务器上的文件传输服务进行管理的接口,通过该接口可以执行以下管理操作:
* 1) 获取该服务器上已经接收到的文件列表。
* 2) 获取上传到该服务器上,通过该服务器转发到目的服务器的文件列表。
* 3) 删除该服务器上某个在传输的文件,该文件可以是接收到的文件或者上传到服务器上的文件。
* 4) 得到服务器上在传输的文件的详细信息,该文件可以是接收到的文件或者上传到服务器上的文件。
*/
public interface IFileTransportManager {
/**
* 获取该服务器上已经接收到的文件列表,该列表包含服务器正在接收的和已经完整接收到的所有文件,文件接收器接收
* 文件服务器上的文件的时候,不必等待服务器完整收到整个文件,服务器只要接收了文件的部分内容,客户端的文件接
* 收器就可以开始将文件接收到客户端,所以该列表包含服务器正在接收的和已经完整接收到的所有文件。该方法返回一个
* Collection,Collection中包含的是FileTransportInfo类的对象,每一个对象中都包含着如下信息:
* 1) 文件的UUID。
* 2) 发送用户的用户名。
* 3) 文件的大小。
* 4) 文件的文件名。
* 5) 文件的源服务器的路由名。
* 6) 文件的目的服务器的路由名。
* 7) 文件的备注。
* 8) 接收文件的用户的客户端ID。
* @return
* 该服务器上已经接收到的文件列表。
* @throws FileTransportException
* 假如取得该服务器上已经接收到的文件列表的过程出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public Collection getAllReceivedFiles() throws FileTransportException;
/**
* 获取上传到该服务器上,通过该服务器转发到目的服务器的文件列表,该列表既包含服务器正在传输到目的服务器的文件
* 也包含了已经上传到服务器还没有开始传输到目的服务器的文件或者是发送端正在向服务器上传的文件。
* 该方法返回一个Collection,Collection中包含的是FileTransportInfo类的对象,每一个对象中都包含着如下信息:
* 1) 文件的UUID。
* 2) 发送用户的用户名。
* 3) 文件的大小。
* 4) 文件的文件名。
* 5) 文件的源服务器的路由名。
* 6) 文件的目的服务器的路由名。
* 7) 文件的备注。
* 8) 接收文件的用户的客户端ID,这里返回的是一个代表还没有被接收的标识。
* @return
* 上传到该服务器上,通过该服务器转发到目的服务器的文件列表。
* @throws FileTransportException
* 假如取得该服务器上的文件列表的过程出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public Collection getAllSendingFiles() throws FileTransportException;
/**
* 删除该服务器上某个传输文件,该文件可以是接收到的文件或者上传到服务器上的文件。要删除的文件根据文件的UUID
* 进行标识。
* @param fileUuid
* 要删除的文件的UUID。
* @throws FileTransportException
* 假如删除文件的过程出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public void removeServerStoreFile(Uuid fileUuid) throws FileTransportException;
/**
* 得到该服务器上某个传输文件的详细信息,要查询的文件根据文件的UUID进行标识。查询的结果包括以下内容:
* 1) 文件的UUID。
* 2) 发送用户的用户名。
* 3) 文件的大小。
* 4) 文件的文件名。
* 5) 文件的源服务器的路由名。
* 6) 文件的目的服务器的路由名。
* 7) 文件的备注。
* 8) 接收文件的用户的客户端ID。
* 9) 文件传输时分成多少块同时进行传输。
* 10) 每一个传输块的详细信息。
* 11) 文件传输时的传输优先级。
* @param fileUuid
* 要查询的文件的UUID。
* @return
* @throws FileTransportException
* 假如查询文件的过程出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public FileTransportDetailsInfo getServerStoreFileDetailsInfo(Uuid fileUuid) throws FileTransportException;
}
FileTransporterObjectFactory一个工厂类,该类用于创建以上接口的实现类的对象。该类的详细说明如下:
package com.apusic.jms.client.file.transport;
import javax.jms.QueueConnection;
import com.apusic.jms.client.admin.loginer.IMqLoginer;
import com.apusic.jms.client.file.transport.internal.ClientFileReceiver;
import com.apusic.jms.client.file.transport.internal.ClientFileSender;
import com.apusic.jms.client.file.transport.internal.ClientFileTransportManager;
/**
* FileTransporterObjectFactory一个工厂类,该类用于创建文件传输客户端接口的实现类的对象。
*/
public final class FileTransporterObjectFactory {
/**
* 传输客户端向服务器发送请求的默认超时时间。
*/
public static final long DEFAULT_REQUEST_TIMEOUT = 120000L;
/**
* 创建该类对象的构造器,调用该构造器之前需要先创建IMqLoginer的实现对象,并先调用其login方法。
* 该对象用于登录本地的MQ服务器,使得通过该工厂创建出来的对象能够连接上已登录的服务器。
* @param loginer
* 用于登录本地MQ服务器的IMqLoginer的实现对象。
*/
public FileTransporterObjectFactory(IMqLoginer loginer);
/**
* 创建一个客户端文件发送器对象,使用默认的请求超时时间(120秒),默认发送器休息间隔(30毫秒)进行创建。
* 创建的客户端文件发送器对象在发送文件的时候将文件上传到登录的服务器,再由服务器传输到远程的目的服务器。
* @return
* @throws FileTransportException
* 创建过程中出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public IFileSender createClientFileSender() throws FileTransportException;
/**
* 创建一个客户端文件发送器对象,使用默认的请求超时时间(120秒)进行创建。
* 创建的客户端文件发送器对象在发送文件的时候将文件上传到登录的服务器,再由服务器传输到远程的目的服务器。
* @param sendingSleepInterval
* 发送器休息间隔,该参数决定发送器发送一个文件消息之后的休息时间,单位是毫秒。
* @return
* @throws FileTransportException
* 创建过程中出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public IFileSender createClientFileSender(long sendingSleepInterval) throws FileTransportException;
/**
* 创建一个客户端文件发送器对象。
* 创建的客户端文件发送器对象在发送文件的时候将文件上传到登录的服务器,再由服务器传输到远程的目的服务器。
* @param sendingSleepInterval
* 发送器休息间隔,该参数决定发送器发送一个文件消息之后的休息时间,单位是毫秒。
* @param requestTimeout
* 发送器向服务器发送请求的请求超时时间,该参数决定发送器向服务器发送一个请求之后等待
* 该请求的回复的超时时间,单位是毫秒。
* @return
* @throws FileTransportException
* 创建过程中出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public IFileSender createClientFileSender(long sendingSleepInterval, long requestTimeout) throws FileTransportException;
/**
* 创建一个客户端文件接收器对象,使用默认的请求超时时间(120秒)进行创建。
* 创建的客户端文件接收器对象将从登录的服务器上接收文件。
* @return
* @throws FileTransportException
* 创建过程中出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public IFileReceiver createClientFileReceiver() throws FileTransportException;
/**
* 创建一个客户端文件接收器对象。
* 创建的客户端文件接收器对象将从登录的服务器上接收文件。
* @param requestTimeout
* 接收器向服务器发送请求的请求超时时间,该参数决定接收器向服务器发送一个请求之后等待
* 该请求的回复的超时时间,单位是毫秒。
* @return
* @throws FileTransportException
* 创建过程中出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public IFileReceiver createClientFileReceiver(long requestTimeout) throws FileTransportException;
/**
* 创建一个文件传输服务管理对象,使用默认的请求超时时间(120秒)进行创建。
* 使用该方法创建出来的管理对象管理的是登录的服务器的文件传输服务。
* @return
* @throws FileTransportException
* 创建过程中出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public IFileTransportManager createFileTransportManager() throws FileTransportException;
/**
* 创建一个文件传输服务管理对象。
* @param managedMqRouterName
* 要管理的文件传输服务所在的MQ服务器的路由名。
* @param requestTimeout
* 管理对象向服务器发送请求的请求超时时间,该参数决定对象向服务器发送一个请求之后等待
* 该请求的回复的超时时间,单位是毫秒。
* @return
* @throws FileTransportException
* 创建过程中出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public IFileTransportManager createFileTransportManager(String managedMqRouterName, long requestTimeout) throws FileTransportException;
/**
* 创建一个文件传输服务管理对象。
* 使用该方法创建出来的管理对象管理的是登录的服务器的文件传输服务。
* @param requestTimeout
* 管理对象向服务器发送请求的请求超时时间,该参数决定对象向服务器发送一个请求之后等待
* 该请求的回复的超时时间,单位是毫秒。
* @return
* @throws FileTransportException
* 创建过程中出现错误将抛出该异常,异常信息中包含了出错的原因。
*/
public IFileTransportManager createFileTransportManager(long requestTimeout) throws FileTransportException;
}