后台异步处理

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

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

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

首先 咱们先建立一个队列异步

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

    private static final int PUSH_MESSAGE_QUEUE_SIZE = 10;debug

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

而后 咱们把数据加入队列get

    /**同步

     * 外部放入it

     * 

     * @param syncDetail

     */

    public void putQueue(PushMessage pushMessage) {

        while (!messagequeue.offer(pushMessage)) {

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

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


        }

    }

最后咱们对队列中的数据进行操做

固然 为了可以达到最好的同步效果 咱们最好也起一个定时任务

   public void initialize() {

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

        ScheduledTaskExecutorFactory.getScheduledTaskExecutor().scheduleWithFixedDelay(

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

    }

相关文章
相关标签/搜索