求教!关于web项目接口设计的思路的一些疑问
精彩呢 2015-11-18 11:19:44 公司最近有一个新的需求如下:
1、作为服务者(相对ESB)使用Servlet调用公司另一个项目的PriceAPI接口获取经常变动的商品价格(PriceAPI的实现是使用Socket长连接公司核心系统,通过XML文件配置订阅价格,当商品价格有变动的时候核心系统会自动下发订阅报文,PriceAPI通过Dom4j解析报文,获取价格,解析出价格之后返回一个商品名称、价格等信息的LIST),,实时更新,这里因为PriceAPI已经是实时更新了价格,所以只需要将LIST保存在内存中,供其他下游合作公司来查询。查询的方式是通过ESB握手,下游公司通过ESB发送报文信息,其中含有商品对应的唯一标识,我在Servlet中解析出报文信息后,返回对应的价格信息。
2、作为消费者(相对ESB)每天早上8点定时向ESB推送所有商品的价格,ESB转给合作公司后返回成功或失败标志。然后更新一个浏览器页面,将返回的成功或失败显示在页面上,页面上有点击按钮,可以再次推送所有商品价格。
3、作为服务者(相对ESB)使用Servlet将内存中的价格在每天早上8点定时生成EXCEL文件,保存在本地服务器后向ESB系统的服务器使用FTP上传一份,ESB返回成功失败信息,若失败,将本地服务器生成的文件再次发送,直到成功为止。
我的思路如下:
1、写一个Servlet,其中定义一个static的MAP集合,将PriceAPI返回的价格信息存储在其中,在WEB.XML文件中将这个Servlet设置load-on-startup,让其随Web项目启动就运行,因为PriceAPI和核心报价系统是长连接,返回价格的方法在其中一个线程长期执行,所以继承PriceAPI接口,在返回价格的方法中存储MAP集合,做到实时更新
2、使用java自带的定时器Timer实现,后来查询资料发现Timer有很多缺陷,改为使用Quartz这个专门做定时任务的框架来实现了定时任务,用Servlet的Listener调用任务,Web项目启动后,定时器任务也随之启动。
3、也是使用Quartz这个框架。
我的疑问:
1、第一个需求,将价格实时存入内存中,供合作公司查询直接存入MAP有没有更好的解决方案,有没有可用的轻框架可以使用,有知道的大神帮忙介绍一下
2、Servlet将内存中的价格封装成Excel文件然后保存到本地服务器,有没有做过类似需求的朋友啊,一点头绪都没有,最难的是还要将文件在Servlet中使用ftp的方式上传到ESB服务器上去。
具体的需求组长已经和合作公司方谈的差不多了,明后天就要开始开发,ESB这边以前从来没有接触过,只能看着文档示例开发,这几天我也查了不少资料,三个需求前两个都写了一些例子出来,大家帮帮忙给点建议,谢谢。