V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kaleidoscope
V2EX  ›  问与答

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

  •  
  •   kaleidoscope · 2020-05-05 21:42:07 +08:00 · 1402 次点击
    这是一个创建于 1664 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    多谢各位大佬

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

    请求进反向代理,主服务器返回 400 或 500,请求转次服务器,次服务器反 200 。客户收到 200
    jaylee4869
        9
    jaylee4869  
       2020-05-06 10:44:48 +08:00
    放到消息队列里。可以存储一个 HttpRequest 这种对象。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   929 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:42 · PVG 03:42 · LAX 11:42 · JFK 14:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.