收藏
回答

请问订阅消息推送【群发】具体怎么实现合理?

有一个需求,每周定时给已订阅消息的用户群发推送,人数大约是20000人。

现在的逻辑是每次从数据库取200条数据,然后for循环,异步调用200次【cloud.openapi.subscribeMessage.send】,然后取下200条数据,循环

我想请问的是,这里异步调用【cloud.openapi.subscribeMessage.send】会不会不好,是否要加一个await?

但如果加了,函数执行时间就会大大增加,会有一个超时的问题。所以比较疑惑到底改怎么处理好。

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

4 个回答

  • 杜凌霄
    杜凌霄
    2020-06-05

    请问现在订阅消息的可推送次数是按授权次数算的吗

    2020-06-05
    有用
    回复
  • LeeJim🌀
    LeeJim🌀
    2020-02-14

    我看了下,我认为是没必要加await的,毕竟没有前后依赖。

    加了await导致,前200条发完才能执行后200条,这等待的时间是完全没必要的。

    2020-02-14
    有用
    回复 5
    • xyz
      xyz
      2020-02-14
      可是按照目前没有加await的情况下,云函数的返回结果是超时。然后有部分用户反馈没有接收到推送。云函数的超时时间我已经设置成了最高20s
      2020-02-14
      回复
    • LeeJim🌀
      LeeJim🌀
      2020-02-14回复xyz
      建议是分多个云函数,切片推送
      2020-02-14
      回复
    • xyz
      xyz
      2020-02-14回复LeeJim🌀
      好的,但是每个切片推送的条数有建议吗,数量在多少内是合理且容易成功的
      2020-02-14
      回复
    • LeeJim🌀
      LeeJim🌀
      2020-02-14回复xyz
      你可以测试下发送单条订阅消息大概耗时多少,然后看下20s超时时间能发送多少条就知道了。
      2020-02-14
      回复
    • xyz
      xyz
      2020-02-14回复LeeJim🌀
      好的谢谢!
      2020-02-14
      回复
  • Admin ²º²⁴
    Admin ²º²⁴
    2020-02-14

    异步调用吧,不用await了。

    另外:

    订阅消息是订阅一次只能发送一条。

    你这么大的量,确定用户每周都会触发订阅一次?

    针对新手很容易出现理解误区的微信小程序订阅消息模块 | 微信开放社区

    https://developers.weixin.qq.com/community/develop/article/doc/0006ac060e4e80183bc9654b856013

    2020-02-14
    有用
    回复 5
    • xyz
      xyz
      2020-02-14
      嗯,数据库会记录订阅数量以及每个用户的剩余可推送次数。但异步调用的话没关系嘛,毕竟相当于有2w个for循环,每个里面都去调用sendAPI,担心服务器吃不消
      2020-02-14
      回复
    • Admin ²º²⁴
      Admin ²º²⁴
      2020-02-14回复xyz
      这个你服务器是请求方,复杂发送请求而已,真正有压力的应该是腾讯服务器,他是被请求方。然后你又用的是云开发,服务器都是腾讯的,如果腾讯服务器没做限制那就是OK的啦,不用担心。要不你模拟测试下,循环调用2W次接口,发送模板消息给自己,当然这个会发送失败,但是也能模拟压测结果
      2020-02-14
      回复
    • xyz
      xyz
      2020-02-14
      之前推送过一次,有一部分用户没有收到消息。然后我查看了云函数的日志,提示云函数超时。所以我不太清楚到底是因为超时导致了一部分用户的推送失败,还是异步调用sendAPI太多,导致推送失败
      2020-02-14
      回复
    • Admin ²º²⁴
      Admin ²º²⁴
      2020-02-14回复xyz
      那就在.send里面fail里写代码重试发送,如果是超时,就settimeout,3分钟后再重发,确保能每条发送成功
      2020-02-14
      回复
    • xyz
      xyz
      2020-02-14回复Admin ²º²⁴
      但是云函数超时以后不是终止执行了吗,那我在fail里面设置的重发或者settimeout也就不执行了吧。还是说只是返回个客户端一个超时提醒,云函数会继续执行?
      2020-02-14
      回复
  • 白宦成 #Linux中国
    白宦成 #Linux中国
    2020-02-14

    把超时的时间调的更高?

    2020-02-14
    有用
    回复 1
    • xyz
      xyz
      2020-02-14
      已经设置成20s,依旧超时
      2020-02-14
      回复
登录 后发表内容
问题标签