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

2020-05-05 21:42:07 +08:00
 kaleidoscope

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

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

多谢各位大佬

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

请求进反向代理,主服务器返回 400 或 500,请求转次服务器,次服务器反 200 。客户收到 200
jaylee4869
2020-05-06 10:44:48 +08:00
放到消息队列里。可以存储一个 HttpRequest 这种对象。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/668745

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX