求教!关于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这边以前从来没有接触过,只能看着文档示例开发,这几天我也查了不少资料,三个需求前两个都写了一些例子出来,大家帮帮忙给点建议,谢谢。
...全文
176 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
精彩呢 2015-11-19
引用 3 楼 sinat_31535993 的回复:
1,没注意是实时更新,存进map就行了,用完就释放,好的很 2,导出相对路径不行吗,有谁规定一定要导出本地了?,ftp上传模板跟在什么地方写有关系?你不能写个方法或者接口直接调用不就行了!
1、Map的生命周期和WEB项目一致,随项目部署启动,项目结束销毁,如果没有其他的方案就用MAP了 2、求例子,谢谢
回复
sinat_31535993 2015-11-19
1,没注意是实时更新,存进map就行了,用完就释放,好的很 2,导出相对路径不行吗,有谁规定一定要导出本地了?,ftp上传模板跟在什么地方写有关系?你不能写个方法或者接口直接调用不就行了!
回复
精彩呢 2015-11-19
引用 1 楼 sinat_31535993 的回复:
1.可以使用缓存,在闲时处理变动价格,做个定时任务定时处理 2.excel表格导出网上一堆模板代码,copy一下就行了,ftp上传一样百度你就知道
价格是需要实时更新的,PriceAPI下发价格的时候已经更新了,我这边做的主要是把下发的价格随下发价格的线程存入内存就好,需要使用缓存吗?还是放入MAP啊,因为是实时更新,所以不存在闲时才去变动价格,同理也不能去定时处理。这个需求已经确认下发价格时随线程更新价格进内存,过程我已经实现了,疑问是存入内存的过程,是直接创建一个静态的Map存入就可以吗?总觉得这样做太草率。 第二点不是简单的导出和上传,前提是在servlet中把内存中的数据生成一个文件(目前生成什么文件没定,我臆想是excle),存入本项目的某个文件夹中,并不是导出到本地,ftp上传也是在servlet中实现ftp上传文件。不是单独的写个ftp程序,有没有类似项目经验的同学可以提供一下思路啊
回复
sinat_31535993 2015-11-19
1.可以使用缓存,在闲时处理变动价格,做个定时任务定时处理 2.excel表格导出网上一堆模板代码,copy一下就行了,ftp上传一样百度你就知道
回复
精彩呢 2015-11-19
引用 5 楼 sinat_31535993 的回复:
1,map用的时候直接new就好,不要用全局的,东西多了没办法清key,占内存 2,思路都说的这么明确了,在做伸手党就不好了!
数据是必须保持在内存中的,因为线程下发的价格list是通过回调方法的参数传递的,在回调方法中给map赋值完成内存存入,用普通的new是不能把map传递出来的。 这3个需求在这几天我已经写了好几个例子在电脑里了,发帖提问的时候也说明了我的思路和疑问,1、2点需求是问有没有更好的解决方案,如果没有,我就按照我的思路去做了,第3点需求从来没有接触过这样的需求,求解决方案,就算是给代码例子也得一行行的读下去,找配置文件,去网上查为什么用这个方法实现,最终写例子,然后结合项目。并没有想做伸手党,谢谢你帮忙分析啊,感谢。
回复
sinat_31535993 2015-11-19
1,map用的时候直接new就好,不要用全局的,东西多了没办法清key,占内存 2,思路都说的这么明确了,在做伸手党就不好了!
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-11-18 11:19
社区公告
暂无公告