nodejs请求进来我把请求放入队列,如何一个一个取出来?

用scoket做聊天程序,请求进来,我把请求放入了队列,代码如下:

  rob_vest: async function (data, socket, io) {
        console.log(type, '------------------------------------------')
        var queue = new Queue();//创建队列
        queue.push(data)//往队列里放入请求数据
        get_vetst(queue,socket, io)//这是从队列取出数据


    },
async function get_vetst(queue,socket, io) {
    // let sequlize = await db
    let len = queue.size()
    if (len !== 0) {
        let data = queue.pop() //从对列取出数据
        //下面是一些对数据的处理以及存库操作
        ...
        }
    }

想上面这样写如果下一次的请求依赖上一次的操作表的结果会导致出现预想之外的结果,虽然是放入到了队列中,但是如果两次请求同时进来,还是会同时读取两次对列中的数据,然后同时对表进行操作,导致第二次的请求,没有得到第一次的结果,理想的流程是,两次请求进来,把两次的请求放入队列,然后会触发一个方法,这个方法读取队列中的数据,当第一次读取并且执行完一系列的操作后,在读取下一个数据再进行操作
get_vetst方法不应该依赖rob_vest
我该如何操作??各位大佬们

阅读 2.5k
2 个回答

需要callback回传ack确认消息,参考amqp协议的消息确认机制

你应该担心的是并发情况下的数据更新问题,建议你了解下数据库相关的锁,比如悲观锁、乐观锁、事务等。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题