kaleidoscope
V2EX  ›  问与答

请教各位大佬 如何把 http 请求保存记录下来可以以后重发

  •  
  •   kaleidoscope · May 5, 2020 · 1917 views
    This topic created in 2289 days ago, the information mentioned may be changed or developed.

    目前有个需求,将发送到 A 服务的请求复制一份发送到 B 服务,如果 B 服务响应不成功,就把这个请求保存下来以后重发。 有什么好的方法保存这个请求以供重发吗

    A,B 服务用的 spring boot,Java 码农

    多谢各位大佬

    9 replies    2020-05-06 10:44:48 +08:00
    GlobalNPC
        1
    GlobalNPC  
       May 5, 2020   ❤️ 1
    python 里面可以用装饰器写 retry
    Java 应该也有类似的吧
    azh7138m
        2
    azh7138m  
       May 5, 2020
    如果只是镜像流量
    https://nginx.org/en/docs/http/ngx_http_mirror_module.html
    如果是短时间内就可以重试,可以 nginx 直接 retry
    opengps
        3
    opengps  
       May 5, 2020 via Android
    搜索下 HAR 相关用法,我没具体做过,盲猜这个路径可以尝试
    kaleidoscope
        4
    kaleidoscope  
    OP
       May 5, 2020
    @infun spring 确实有 retry 框架,我研究研究 多谢大佬!
    kaleidoscope
        5
    kaleidoscope  
    OP
       May 5, 2020
    @azh7138m 需要手动恢复 B 服务才能重试,可能需要比较久。。这个我也没用过,要研究研究 多谢大佬
    GlobalNPC
        6
    GlobalNPC  
       May 5, 2020 via Android
    @kaleidoscope 。。。那么久就应该另起定时任务来做吧,失败了放失败队列,定时去捞失败的重试
    kaleidoscope
        7
    kaleidoscope  
    OP
       May 5, 2020
    @infun 😂就是不太清楚怎么样把这些请求以一种结构存起来
    nvkou
        8
    nvkou  
       May 6, 2020 via Android
    问题是谁重发?
    客户可能已经离开了,你这个请求从谁那里重发?
    如果是保持链接的重试,增加增加 ttfb 时间,那就从反向代理服务器入手。
    如果是客户不关注的指令,你可以上队列。
    保存请求更像是日志的事情,你要模拟请求当然可以保存下来,http 请求很好保存,但发起人就绝对不是原来的客户了。

    请求进反向代理,主服务器返回 400 或 500,请求转次服务器,次服务器反 200 。客户收到 200
    lavvrence
        9
    lavvrence  
       May 6, 2020
    放到消息队列里。可以存储一个 HttpRequest 这种对象。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5734 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 02:43 · PVG 10:43 · LAX 19:43 · JFK 22:43
    ♥ Do have faith in what you're doing.