【多文件自平衡云传输】使用展示|【多文件自平衡云传输】使用展示 —— 文件传输系统

【多文件自平衡云传输】使用展示|【多文件自平衡云传输】使用展示 —— 文件传输系统
文章图片

【【多文件自平衡云传输】使用展示|【多文件自平衡云传输】使用展示 —— 文件传输系统】本篇博文,作为 多文件自平衡云传输 框架 的 使用案例
将会全面应用 多文件自平衡云传输 框架,来实现一个 文件传输系统
那么,话不多说,现在就开始讲解吧:
首先,本人来 说明下 需要的 Jar包支持:
Jar包 支持:

  • Youzg-Mec-Utils-0.0.1.jar
    (可在本人博文《【小工具】专栏总集篇》文末获取)
  • rmi-0.0.1.jar
    (可在本人博文《详解 RMI技术 的基本实现》文末获取)
  • net-file-trans-0.0.1.jar
    (可在本人博文《详解 网络文件传输技术 的基本实现》文末获取)
  • balance-0.0.1.jar
    (可在本人博文《详解 负载均衡技术 的基本实现》文末获取)
  • resource-discovery-0.0.1.jar
    (可在本人博文《详解 资源发现技术 的基本实现》文末获取)
  • mfsbct-0.0.1.jar
    (可在本人博文《【多文件自平衡云传输】专栏总集篇》文末获取)
  • log4j-1.2.17.jar
  • cglib-nodep-2.1.3.jar
  • gson-2.7.jar
  • fastjson-1.2.62.jar
在之前的博文中,本人就讲过:
主要是实现 三端:
  1. 注册中心
  2. 文件发送端
  3. 文件接收端
那么,本人就先来实现下 注册中心
注册中心: 实现 逻辑: 直接使用 多文件自平衡云传输 框架
实现 注册中心 的 初始化、启动、消息处理、关闭 等功能 即可
实现 代码:
package edu.youzg.test; import edu.youzg.resource_founder.core.IResourceListener; import edu.youzg.resource_founder.core.ResourceRegistryCenter; import org.apache.log4j.Logger; public class ResourceCenterServer implements IResourceListener { private static final String DEFAULT_CONFIG_PATH = "/resource/ResourceRegistryCenter-RMI.xml"; public static final int RCSPort = 6666; private ResourceRegistryCenter center; private Logger log = Logger.getLogger(ResourceCenterServer.class); public ResourceCenterServer() { this.center = new ResourceRegistryCenter(RCSPort); this.center.addListener(this); } public void initCenter() { initCenter(DEFAULT_CONFIG_PATH); } public void initCenter(String configFilePath) { this.center.initRegistryCenter(configFilePath); } public void startup() { this.center.startup(); } public void shutdown() { this.center.shutdown(); } @Override public void dealMessage(String message) { log.info(message); } }

文件发送端: 实现 逻辑: 直接使用 多文件自平衡云传输 框架
实现 文件发送端 的 初始化、注册 文件资源、注销 文件资源 等功能 即可
实现 代码:
package edu.youzg.test; import edu.youzg.multifile_cloud_transfer.exception.RegistryIpIsNullException; import edu.youzg.multifile_cloud_transfer.resourcer.SourceFileList; import edu.youzg.multifile_cloud_transfer.sender.SourceHolderNode; import edu.youzg.resource_founder.core.ResourceBaseInfo; /** * 文件发送端 */ public class FilesSender { private SourceHolderNode holderNode; public FilesSender() throws RegistryIpIsNullException { this.holderNode = SourceHolderNode.newInstance(); } public static void initConfig(String configFile) { SourceHolderNode.initConfig(configFile); } public void registryResource(ResourceBaseInfo baseInfo, SourceFileList fileList) { this.holderNode.reportResource(baseInfo, fileList); } public void logoutResource(ResourceBaseInfo baseInfo) { this.holderNode.logoutResource(baseInfo); }}

文件接收端: 实现 逻辑: 直接使用 多文件自平衡云传输 框架
实现 文件接收端 的 初始化、获取 资源基本信息列表、获取 指定资源详细信息列表、请求资源 等功能 即可
实现 代码:
package edu.youzg.test; import edu.youzg.multifile_cloud_transfer.exception.ResourceNotExistException; import edu.youzg.multifile_cloud_transfer.receive.ResourceReceiver; import edu.youzg.multifile_cloud_transfer.resourcer.SourceFileList; import edu.youzg.multifile_cloud_transfer.sender.SourceHolderNode; import edu.youzg.resource_founder.core.ResourceBaseInfo; import edu.youzg.resource_founder.core.ResourceSpecificInfo; import edu.youzg.util.PropertiesParser; import java.util.List; /** * 文件接收端 */ public class FilesReceiver { private ResourceReceiver videoReceiver; public FilesReceiver() { this.videoReceiver = new ResourceReceiver(); } /** * 根据 指定路径,初始化 接收端信息 * @param configFile 配置文件 所在路径 */ public void initConfig(String configFile) { SourceHolderNode.initConfig(configFile); PropertiesParser.loadProperties(configFile); int port = Integer.valueOf(PropertiesParser.value("port")); String registryIp = PropertiesParser.value("registry_ip"); int registryPort = Integer.valueOf(PropertiesParser.value("registry_port")); this.videoReceiver.setCenterIp(registryIp); this.videoReceiver.setCenterPort(registryPort); this.videoReceiver.setReceiveServerPort(port); } public void setBaseInfo(ResourceBaseInfo ri) { this.videoReceiver.setBaseInfo(ri); } public void setSourceFileList(SourceFileList fileList) { this.videoReceiver.setFileList(fileList); } /** * 获取 注册中心 的资源基本信息列表 * @return 注册中心 的资源基本信息列表 */ public List getResourceList() { return this.videoReceiver.getResourceList(); } /** * 根据 资源基本信息,获取资源详细信息列表 * @param ri 资源基本信息 * @return 资源详细信息列表 */ public List getFileInfoListByResourceInfo(ResourceBaseInfo ri) { return this.videoReceiver.getFileInfoListByResourceInfo(ri); } /** * 请求资源 */ public void requestFiles() { try { this.videoReceiver.getResourceFiles(); } catch (ResourceNotExistException e) { e.printStackTrace(); } }}

那么,到这里,三端就实现完毕了!
下面,我们来测试下 是否能达到我们期望的目标:
测试: 首先是 注册中心端
文件资源 注册中心:
package edu.youzg.test; /** * 注册中心 步骤:
* 1、初始化 ResourceCenterServer
* 2、启动 注册中心 */ public class TestResourceCenter { public static void main(String[] args) { ResourceCenterServer rcs = new ResourceCenterServer(); rcs.initCenter("/resource/ResourceRegistryCenter-RMI.xml"); rcs.startup(); } }

注册中心 RMI配置文件 —— ResourceRegistryCenter-RMI.xml: 配置路径:
resource/ResourceRegistryCenter-RMI.xml

配置内容:

接下来 是 两个发送端:
文件资源 发送端1:
package edu.youzg.test; import edu.youzg.multifile_cloud_transfer.exception.RegistryIpIsNullException; import edu.youzg.multifile_cloud_transfer.resourcer.SourceFileList; import edu.youzg.resource_founder.core.ResourceBaseInfo; import edu.youzg.resource_founder.resourcer.ResourceHolder; /** * 发送端 步骤:
* 1、准备 资源 * 2、准备 发送端 * 3、注册资源 */ public class TestFilesSender1 { public static void main(String[] args) throws RegistryIpIsNullException { FilesSender.initConfig("/resource/holder1.properties"); ResourceHolder.scanRMIMapping("/resource/ResourceHolder-RMI.xml"); ResourceBaseInfo ri = new ResourceBaseInfo("app", "20170526212853", "1"); SourceFileList sfl = new SourceFileList(); sfl.setAbsoluteRoot("E:\\Multi-file self-balancing cloud transfer\\testArea\\source\\"); sfl.collectFiles(); FilesSender sender = new FilesSender(); sender.registryResource(ri, sfl); }}

发送端1 连接参数配置文件 —— holder1.properties: 配置路径:
resource/holder1.properties

配置内容:
port=54192 registry_ip=localhost registry_port=6666

文件资源 发送端2:
package edu.youzg.test; import edu.youzg.multifile_cloud_transfer.exception.RegistryIpIsNullException; import edu.youzg.multifile_cloud_transfer.resourcer.SourceFileList; import edu.youzg.resource_founder.core.ResourceBaseInfo; import edu.youzg.resource_founder.resourcer.ResourceHolder; /** * 发送端 步骤:
* 1、准备 资源 * 2、准备 发送端 * 3、注册资源 */ public class TestFilesSender2 { public static void main(String[] args) throws RegistryIpIsNullException { FilesSender.initConfig("/resource/holder2.properties"); ResourceHolder.scanRMIMapping("/resource/ResourceHolder-RMI.xml"); ResourceBaseInfo ri = new ResourceBaseInfo("app", "20170526212853", "1"); SourceFileList sfl = new SourceFileList(); sfl.setAbsoluteRoot("E:\\Multi-file self-balancing cloud transfer\\testArea\\source"); sfl.collectFiles(); FilesSender sender = new FilesSender(); sender.registryResource(ri, sfl); }}

发送端2 连接参数配置文件 —— holder2.properties: 配置路径:
resource/holder2.properties

配置内容:
port=54193 registry_ip=localhost registry_port=6666

发送端 RMI配置文件 —— ResourceHolder-RMI.xml: 配置路径:
resource/ResourceHolder-RMI.xml

配置内容:

最后是 两个接收端:
文件资源 接收端1:
package edu.youzg.test; import edu.youzg.multifile_cloud_transfer.resourcer.SourceFileList; import edu.youzg.resource_founder.core.ResourceBaseInfo; import edu.youzg.resource_founder.core.ResourceSpecificInfo; import java.util.List; /** * 接收端 步骤:
* 1、读取配置文件,初始化 SourceHolderNode 和 FilesReceiver * 2、请求 资源列表 * 3、请求 指定的资源 */ public class TestFilesReceive1 { public static void main(String[] args) { FilesReceiver filesReceiver = new FilesReceiver(); filesReceiver.initConfig("/resource/receive1.properties"); List resourceList = filesReceiver.getResourceList(); if (resourceList == null || resourceList.size() <= 0) { System.out.println("注册中心 当前不存在 资源"); return; }ResourceBaseInfo resourceInfo = resourceList.get(0); SourceFileList sfl = new SourceFileList(); List fileInfoList = filesReceiver.getFileInfoListByResourceInfo(resourceInfo); sfl.setFileList(fileInfoList); sfl.setAbsoluteRoot("E:\\Multi-file self-balancing cloud transfer\\testArea\\target1\\"); filesReceiver.setBaseInfo(resourceInfo); filesReceiver.setSourceFileList(sfl); filesReceiver.requestFiles(); }}

接收端1 连接参数配置文件 —— receive1.properties: 配置路径:
resource/receive1.properties

配置内容:
port=54194 registry_ip=localhost registry_port=6666

文件资源 接收端2:
package edu.youzg.test; import edu.youzg.multifile_cloud_transfer.resourcer.SourceFileList; import edu.youzg.resource_founder.core.ResourceBaseInfo; import edu.youzg.resource_founder.core.ResourceSpecificInfo; import java.util.List; /** * 接收端 步骤:
* 1、读取配置文件,初始化 SourceHolderNode 和 FilesReceiver * 2、请求 资源列表 * 3、请求 指定的资源 */ public class TestFilesReceive2 { public static void main(String[] args) { FilesReceiver filesReceiver = new FilesReceiver(); filesReceiver.initConfig("/resource/receive2.properties"); List resourceList = filesReceiver.getResourceList(); if (resourceList == null || resourceList.size() <= 0) { System.out.println("注册中心 当前不存在 资源"); return; }ResourceBaseInfo resourceInfo = resourceList.get(0); SourceFileList sfl = new SourceFileList(); List fileInfoList = filesReceiver.getFileInfoListByResourceInfo(resourceInfo); sfl.setFileList(fileInfoList); sfl.setAbsoluteRoot("E:\\Multi-file self-balancing cloud transfer\\testArea\\target2\\"); filesReceiver.setBaseInfo(resourceInfo); filesReceiver.setSourceFileList(sfl); filesReceiver.requestFiles(); }}

接收端2 连接参数配置文件 —— receive2.properties: 配置路径:
resource/receive2.properties

配置内容:
port=54195 registry_ip=localhost registry_port=6666

接收端 RMI配置文件 —— ResourceHolder-RMI.xml: 配置路径:
resource/ResourceHolder-RMI.xml

配置内容:

相信很多同学会疑惑:
为什么 接收端也要有 和发送端一样的 RMI配置文件 呢?
这是因为:
当 接收端 接收完毕 指定的文件资源后,接收端也就成了 该资源的拥有者,
会将自身注册为 该资源的发送端
全局 日志配置文件 —— log4j.properties: 配置路径:
log4j.properties

配置内容:
# 将等级为DEBUG的日志信息输出到console和file这两个目的地, # console和file的定义在下面的代码 log4j.rootLogger=DEBUG,console,file# 控制台输出的相关设置 log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Target=System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%c]-%m%n# 文件输出的相关设置 log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/youzgLog.log log4j.appender.file.MaxFileSize=10mb # 限定写入文件的信息级别 # log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n# 日志输出级别 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG

至此,使用案例 就基本完成了!
那么,本人现在通过 一个视频 来展示下 运行结果:
视频 展示: 《大学僧 自制 Java“开源”框架 使用展示》
若有需要上述代码的同学,本人已将本文所讲解到的代码上传:
完整 代码: 如有需要,请点击下方链接:
Multi-file-self-balancing-cloud-transfer-System

    推荐阅读