E3Upload项目总结
项目需求:读取阿里云数据库数据,通过webservice接口上传给第三方。
概要设计,项目满足以下几点:
1、动态接口调用
2、给多平台上传
3、数据保持(减轻数据库压力)
4、上传任务管理
5、扩展成实时数据服务器
实现方案:
设计1:对于第一个需要我们上传数据的平台给出的借口是webservice接口(不能get/post表单访问的那种),考虑到以后可能会有类似于restful/webapi之类的接口,
所以此处必须采用动态接口调用。目前实现了webservice动态接口访问。关于动态访问,有2中实现思路,第一种:预读取WSDL,动态编译,反射方法,调用。
由于我在项目中实现第一种方法失败了(动态编译时死活不能加载程序集,未解决的问题),因此我用了另外一种思路,通过字符串构造满足soap协议的xml发送给接口。
此处采用了开源的 https://github.com/LiveXY/Pub.Class/blob/master/Pub.Class/Class/WebService.cs
设计2:以后有类似于此项目结构的需求,为了避免重复开发,因此这里定义了上传平台,平台包括接口(全部构建在XML中),动态读取。
但是目前所有的接口都未知,不知道将会是什么结构或者需求,因此这里实现的比较粗糙。但是比较大尺度的隔离了各个平台的操作,因此扩展性也是比较强。
设计3:当需要上传的项目较多,重复索引同一个项目的数据的时候,势必会给数据库服务器造成很大的压力,因此,这里做了数据保持,通过项目的结构形式,将数据保存在内存中,
满足一定的条件才去从数据库读取数据。(为做成实时数据服务器做准备)。但是由于时间 原因,没有继续朝设计5去设计实现。
设计4:系统采用Quartz.net组件实现定时上传作业,使用过程中碰到的坑有关于时区问题和单次触发(triggerJob)无效。在实践中发现时区问题不存在,即时存在也可以通过cronExpress 的合理设置而避免。单词触发无效,我找来了源码,一步步执行下去,发现又没有问题了(amazing!怀疑跟载入的符号系统相关跟动态编译不能载入程序集一样没解决)
关于任务管理,作为第二版的功能实现,此处暂时不实现。
设计5:预计将来扩展成实时数据服务器,开放webservice给外界调用数据,目的为了减轻数据库服务器压力,由于时间原因,暂未实现!
补充:该项目同时使用了log4net组件和Newtonsoft.Json。采用DevExpress实现的简单界面。
log4net使用步骤总结,引用组件、编写log4net配置文件、启动log4net,通过assembly或者log4net.Config.XmlConfigurator.Configure()载入启动、getlogger、写入。
总用时11天。(框架设计4天,业务逻辑代码实现2天,关于任务以及学习Quartz.net2天,webservice动态调用2天,测试和补充log4net写日志1天)
E3Upload项目总结的更多相关文章
- Fis3前端工程化之项目实战
Fis3项目 项目目录结构: E:. │ .gitignore │ fis-conf.js │ index.html │ package.json │ README.md │ ├─material │ ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目
最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...
- Hangfire项目实践分享
Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...
- Travis CI用来持续集成你的项目
这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- Angular企业级开发(5)-项目框架搭建
1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
随机推荐
- Representations of graphs
We can choose between two standard ways to represent a graph as a collection of adjacency lists or a ...
- 排序算法C++实现
先按照王道系列的伪代码,写了一下常见的排序算法.代码先放这儿,先不做算法分析,回头再来分析消化. // 排序算法.cpp : 定义控制台应用程序的入口点. // #include "stda ...
- Kubernetes移除node节点
1.kubectl delete node {{节点名称}} 2.删除node节点上由kubelet自动生成的kubelet.kubeconfig配置文件,和ssl密钥证书kubelet.key,ku ...
- IDEA 编译时 报 “常量字符串过长” 解决办法
从eclipse 工具转到 IDEA 工具的时候,出现了一些问题,在这里记录一下,以便之后使用到,废话不多说. 在编译项目时,出现错误为:"常量字符串过长" ,我当时想这个问题需要 ...
- 自定义注解(spring)
终于有时间可以在这里写一篇博文了,今天写一下我在项目中用到的自定义注解,就是在每次操作项目的时候,想把它的操作加在我的数据库中,简单地说就是日志管理,这些东西都写完之后,我就问我自己,问什么要自定义注 ...
- 命令行执行python模块时提示ImportError: No module named xxx
在pycharm中运行python文件没有问题,切换到cmd中是提示:ImportError: No module named xxx 原因: pycharm在运行时会把当前工程的所有文件夹路径都作为 ...
- 调试利器GDB(下)
本节我们研究gdb更深层的用法: 数据断点: 可以根据变量的值来监视变量. 数据断点本质是硬件断点,数量有限. watch var_name告诉gdb我们关注var_name这个变量,如果它的值被改变 ...
- git教程:撤销修改
转载:撤销修改 自然,你是不会犯错的.不过现在是凌晨两点,你正在赶一份工作报告,你在readme.txt中添加了一行: $ cat readme.txt Git is a distributed ve ...
- Golang微服务:Micro Trace使用opentracing jaeger
trace Micro通过Wrapper实现了三种trace接口,aswxray,opencensus,opentracing,这里主要关注opentracing,opentracing已成为行业标准 ...
- Windows 上安装 Azure PowerShell及Azure PowerShell部署虚拟机
一.Azure PowerShell部署 1.使用 PowerShellGet 在 Windows 上安装 Azure PowerShell 从 Azure PowerShell 版本 6.0 开 ...