dxm1986 2010-09-28 09:55
浏览 217
已采纳

异步加积分与及时向用户显示之间的问题

在开发中,遇到了一个这样的问题,用户登录,写日志等需要给用户加系统积分,但为了减轻系统压力,而且为了避免因为加积分失败,而影响写日志等操作失败(事务设在Service方法级别,而保存日志与加积分操作在同一个service中)
我将加积分用JMS实现,是一种异步操作,每次用户登录时,向JMS发送一个积分对象,然后JMS消费队列会去取这个积分对象,然后执行加积分操作,执行加积分的同时,会向内存中写一段特制的代码,在用户请求返回之前,会去内存中查一次是否有加积分代码存在,如果在则写入到Response中,由前台JS进行监控,然后执行加积分操作,并及时提示用户。

到这里问题就来了,加积分是异步的,但又需要向用户及时显示加积分的结果,目前我们的解决方案是在用户请求返回之前,我们统一的将线程休眠100ms,等待加积分执行完,保存能从内存中取到加积分的特制代码,并写入response,并在前台及时告知用户,加积分成功。但是由于系统与网络执行速度不确定,所以休眠100ms,导致的结果是有时候用户能看到提示框,告诉它加积分了,但有时候虽然加积分了,但没有提示框弹出。

 

不知道各位有没有好的解决方案,当然将积分同步这样的我们也考虑过。

 

比如按如下执行

 

public class DiaryServiceImpl implements{

 

      private DiaryDao  diaryDao;

      private ScoreDao  scoreDao;

 

      public void saveDiary(Diary diary){

                   diaryDao.save(diary);

 

                   //SocreData scoreData

                   tru{

                   scoreDao.save(scoreData);

                   }catch(Exception e){

                          //捕获异常,辟免因为加积分失败,导致写日志失败

                  }

       }

}

 

但经过讨论,我们觉得有大在用户量访问的时候,同步加积分可能对系统造成过大的压力,所以我们用JMS 异步方式加积分,但遇到了我在开始述说的问题,不知各位有没有好的解决方案,好像我没有积分了,所以也不能提供悬赏,看在大家都热衷于JAVA,大家都来帮忙讨论一下吧,谢谢了。

  • 写回答

2条回答 默认 最新

  • iteye_2443 2010-09-28 11:29
    关注

    您说的好像很麻烦。
    我不太明白
    为什么不是ajax异步处理?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘