后台异步处理

我们知道,在前台为了提高用户体验度,在很多情况下都会去用ajax发异步处理一些请求,比如用户登录,注册等等.最近在做的项目中,在后台也老用到异步处理一些数据,比如当注册用户过多,一般我们的数据连接池里面就的数据连接是固定,当用户需要的连接数大于我们数据连接池所支持的数据连接数时,就会出现阻塞这种情况,用户就会感觉很慢,我们可以先返回一个消息给用户说他注册成功,然后我们异步处理,将用户的注册信息插入到数据库中.这样给用户的体验效果会好一点(这只是举个例子,当然在实际操作中我们这样做的情况很少,因为的话当返回给用户提示信息的时候,用户去登录却登录不上.),注册信息过多。。。

1.我们异步处理后台信息有两个方法 当并发量不是很高的时候 我们可以在后台起一个定时任务(ScheduledTaskExecutorFactory.getScheduledTaskExecutor().scheduleWithFixedDelay)

2.当我们并发量高的时候 我们就要用到队列了

首先 我们先创建一个队列

private static final Logger log = LoggerFactory.getLogger(PushMessageBean.class);

    private static final int PUSH_MESSAGE_QUEUE_SIZE = 10;

    private BlockingQueue<PushMessage> messagequeue = new ArrayBlockingQueue<PushMessage>(PUSH_MESSAGE_QUEUE_SIZE);

然后 我们把数据加入队列

    /**

     * 外部放入

     * 

     * @param syncDetail

     */

    public void putQueue(PushMessage pushMessage) {

        while (!messagequeue.offer(pushMessage)) {

            log.debug("PushMessage的queue满了,请求插入");

            ScheduledTaskExecutorFactory.getScheduledTaskExecutor().execute(new QueueInsertTask(messagequeue));


        }

    }

最后我们对队列中的数据进行操作182437_gSqb_914362.png

当然 为了能够达到最好的同步效果 我们最好也起一个定时任务

   public void initialize() {

        // 定时的去清理queue中的数据,入库

        ScheduledTaskExecutorFactory.getScheduledTaskExecutor().scheduleWithFixedDelay(

                new QueueInsertTask(messagequeue), 10, 10, TimeUnit.SECONDS);

    }

转载于:https://my.oschina.net/u/914362/blog/301663

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值