Jekins
V2EX  ›  Java

如何大量请求发送短信接口?

  •  
  •   Jekins · Mar 10, 2022 · 5300 views
    This topic created in 1706 days ago, the information mentioned may be changed or developed.

    客户提供的短信接口没有批量发送短信的接口..目前是在循环里去直接 http 请求(根据返回状态判断短信是否发送成功).这样做肯定不行的.目前项目还未上线..所以还没有想到一个比较好的解决办法...使用 CompletableFuture 虽然不会阻塞...但是对面的 api 肯定会防止刷 api 限流...有老哥解决过类似需求吗?

    27 replies  •  2022-03-26 11:16:13 +08:00
    9c04C5dO01Sw5DNL
    9c04C5dO01Sw5DNL
    Mar 10, 2022
    1
    这个。。。既要大量请求,又要防限流。。。。矛盾了。还是问问对面吧。

    另外 CompletableFuture 提供的只是异步接口,但是 io 会不会阻塞主要看用的是 bio 还是 nio 还是 aio
    mjVtb96d2bap2u3Z
    mjVtb96d2bap2u3Z
    Mar 10, 2022
    2
    换接口?
    Jekins
    Jekins
    OP
    Mar 10, 2022
    3
    @giiiiiithub 我开发经验不足.谢谢老哥回复解答.
    Jekins
    Jekins
    OP
    Mar 10, 2022
    4
    @ali727 额..我也想.客户提供的,没法改...
    RedBeanIce
    RedBeanIce
    Mar 10, 2022
    5
    他们设计的接口有问题啊。

    根据现在的情况,你只能开启多线程去调用然后 get 阻塞???这样子好难
    应该他们回调你们接口,会好一点,,,这样子阻塞太难了,,建议他们改接口,他们的错误,我们不背锅
    Jekins
    Jekins
    OP
    Mar 10, 2022
    6
    @RedBeanIce 感谢老哥回复. 我以为会有排队请求 api 这种方案的...
    chawuchiren
    chawuchiren
    Mar 10, 2022
    7
    延迟队列?
    zzfer
    zzfer
    Mar 10, 2022
    8
    排队请求不久是队列吗
    Xusually
    Xusually
    Mar 10, 2022 via iPhone
    9
    不行就自己维护队列呗
    IvanLi127
    IvanLi127
    Mar 10, 2022
    10
    问清楚对面这个功能是不是要循环调用这个接口。是的话就这样调咯,有限流就卡着限制做呗,慢慢循环完就是了。他们不急你急啥,是吧
    aofall
    aofall
    Mar 10, 2022
    11
    引入队列中间件 rocketmq 之类的?
    Kyle18Tang
    Kyle18Tang
    Mar 10, 2022
    12
    DelayQueue?
    murmur
    murmur
    Mar 10, 2022
    13
    你们的接口太辣鸡,就现在发广告的速度,大规模短信接口不是问题,经费没到位
    ytmsdy
    ytmsdy
    Mar 10, 2022
    14
    先把请求接收进来,然后数据丢到 redis 里面慢慢处理。丢进去之前先看看 10 分钟以内有没有发送过,如果有就直接丢错给前端,如果没有,那就进队列慢慢排队。
    coderJie
    coderJie
    Mar 10, 2022
    15
    用队列排队发送请求啊
    dorothyREN
    dorothyREN
    Mar 10, 2022
    16
    我有批量的接口,但是只能相同内容
    westoy
    westoy
    Mar 10, 2022
    17
    对方要针对 app id 和 IP 双重限流你玩出花儿也没效果, 而且你也没法保证对方不偷量啊

    找对方商务谈再开个限制放开的接口啊

    没得谈就再引入一个供应商
    sampeng
    sampeng
    Mar 10, 2022
    18
    短信供应商遍地都是的。。。你偏偏吊死在一个连大量发短信都做不到的供应商上。。。
    sampeng
    sampeng
    Mar 10, 2022
    19
    但是你这个肯定会限流的结论怎么得到的?是客户说的?还是你猜的?人家就不能收到一个请求,自己放自己队列里么。。。为啥会不行?我们连 aws 和阿里云发短信都是循环循环里面直接调 sdk ,同样是一条一条发的,他限不限流和你没关系,你要做的只是限流的时候你别崩溃和出现其他问题。你压根就不用考虑他会不会挂
    jamsfox
    jamsfox
    Mar 10, 2022
    20
    可以了解下时间轮能不能满足你们的需求
    Jekins
    Jekins
    OP
    Mar 10, 2022
    21
    @sampeng 感谢老哥回复.必须使用客户提供的(他们自己公司内部的短信接口)..这个是内部系统.没办法.要不然就上阿里云之类的了. 另外是客户自己的说的不支持.不然我也不会折腾了.
    teem
    teem
    Mar 10, 2022
    22
    哪家短信供应商这么垃圾?我用的批量通知,接口参数本身就支持电话数组,短信供应方会合适处理。
    killergun
    killergun
    Mar 10, 2022
    23
    换提供商啊,还能在一棵树上吊死
    seakingii
    seakingii
    Mar 10, 2022
    24
    自己维护一个队列,简单点就把要发的短信存数据库.
    根据对方的 API 的限流一条条发.超过限流了就等一会再发.
    runo
    runo
    Mar 10, 2022 via iPhone
    25
    qps 很高的话个人认为可以做 mq ,请求的时候 http 做连接池等之类的优化~
    ps: #19 说了半天是在说明“限流”相关的问题,您这#21 为啥全程在解释为啥不能用阿里云…?
    killergun
    killergun
    Mar 10, 2022
    26
    如果公司短信很多的话,就应该有使用多家短信服务,不然短信平台出问题了,短信相关的功能全挂了
    byte10
    byte10
    Mar 26, 2022
    27
    没有一个正确的回答呀。。。少年,你用 NIO 啊,一秒可以发送几万条。。你看看我的视频吧,有讲解的 https://www.bilibili.com/video/BV1FS4y1o7QB 。但是你说对方有限流,那么这个是无解的,可以通过申请多个短信账号去发,要么就跟他们服务商谈判。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3429 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 91ms · UTC 01:00 · PVG 09:00 · LAX 17:00 · JFK 20:00
    ♥ Do have faith in what you're doing.