收藏
回答

subscribeMessage.send 如何并发处理?

 声明一个调用接口

const senddingyue=async(openid,thing1,thing2,id)=>{

  console.log(Date.now()-time,openid,thing1,thing2,id)

  try {

  let sendResult=await cloud.openapi.subscribeMessage.send({

      touser:openid,

      templateId:templateId,

      page: 'pages/index/index',

      data: {

          thing1: {

            value: thing1,

          },

           thing5: {

            value: thing2,

           },

        }

       })

       console.log(thing2,sendResult)

       if(sendResult.errCode==0){//发送成功,删除数据库数据

       let del= await db.collection('ttttt').doc(id).remove()

       console.log(del)

       }

  } catch (error) {

    console.log(error)

  }

}


云函数主函数调用上面接口时,

    for(let i=0;i<messagelist.data.length;i++){

      await delay(10);//延时

      let thing1=messagelist.data[i].gname

      let thing2=messagelist.data[i].inf01

      senddingyue(messagelist.data[i]._openid,thing1,thing2,messagelist.data[i]._id)

    }

主函数  await delay(10)如果不加延时,很多subscribeMessage.send调用处理无效,返回失败值:-1。

但是,加延时后,比如20ms,一个云函数10s算,也只能处理500条通知,注定无法处理高并发,比如整点发送2万条通知,有什么好方法解决吗?


回答关注问题邀请回答
收藏

1 个回答

  • 老张
    老张
    2020-09-21

    无法解决。建议放弃。

    另:订阅消息这种机制,很难想象怎么可能用到批量群发,还是2万+的定时群发,你是怎么解决用户授权订阅的?是怎么让用户攒够每天定时群发的订阅数的?

    当然,如果是长期订阅消息就当我没说。

    2020-09-21
    有用
    回复
登录 后发表内容
问题标签