论坛首页 Java企业应用论坛

请教关于两个独立tomcat之间的通信

浏览 3405 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-08  
现有这个消息发送系统,它有两部分组成:前台管理和后台发送引擎。他们位于同一台服务器上的两个独立的tomcat中。

整个系统的大致运行模式是:当前台的管理系统设置好待发消息后,将数据库表中对应的这条数据的某个标志位进行置位,而后台发送引擎分为两个部分,读取线程发现此标志位后,将其读入并包装后放入内存的任务池中,再由某一个工作线程再将其取出后进行相应的发送处理(现阶段读取线程设为1个,工作线程设为3个),发送结束后再将前台数据库表中此数据对应的标志位进行置位。

现在有一个问题在困扰我的是:如果前台管理系统在设置好待发消息后,我准备取消此次发送任务,此时该怎么处理比较好呢? 如果后台读取线程尚未读取此次任务,则简单将前台数据库表中对应的数据的标志位重新置位即可,但是一旦已经被读入后,如果工作线程尚未进行处理,则清除任务池中此次任务。如果已经正在处理中了,那么必然需要让工作线程放弃此次任务。

分析是这么分析,但是两个独立的tomcat之间该如何比较好的处理这种问题?
   发表时间:2007-12-08  
取消任务池,这个完全是画蛇添足,线程池在多个工作线程间的线程安全维护所消耗的时间跟直接在数据库连接池中取得连接对象进行数据库查询时间基本等同,别太小看了现代的RDBMS,放到内存未必就比数据库快多少. 或者给你的任务池添加一个除去池中代发任务的API,然后把这个API用Hessian 或其它协议暴露给你的另一个tomcat
0 请登录后投票
   发表时间:2007-12-08  
两个异步操作,你做通信好像也解决不了问题吧

可以考虑多加个功能,确认发送
0 请登录后投票
   发表时间:2007-12-09  
使用悲观锁
0 请登录后投票
   发表时间:2007-12-10  
远程调用->锁住任务池->除去池中某个任务->解锁任务池->返回执行状态码
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics