微服务架构中,请求及其参数如何做存储处理?

107 天前
 steelshadow39
本人学生,在做项目的时候,遇到如下场景,想请教大家在实际公司项目中是如何解决类似问题的:

在第一次调用一个 POST 接口时,POST 请求体参数由用户前端填写,如果后端需要主动调用这个接口执行一次相同的任务,就必须要对这个 POST 请求的参数做持久化。做持久化就需要对请求中每个参数的字段做解析才能入库。

我使用 SpringCloudGateway 作为网关,管理模块和其他子模块都用 springboot 。我最初的想法是在网关层对请求做持久化,但由于每个请求体的参数对网关来说并不透明,网关需要对 JSON 请求体中的字段依次解析才能入库,而且我认为网关只用负责鉴权和路由,做持久化对整体性能肯定有影响(尽管项目规模小时并不明显)。

所以我现在的想法是,每个服务的请求由各自单独做持久化,因为请求体内的参数类型对负责处理它的接口来说都是透明的。如果用这种方式,是否还需要对每个请求参数做标识?这样管理模块才能够使用之前的参数来调用子模块的同一接口。管理模块和子模块一般是如何实现调度的呢?

以上表述难免有疏漏之处,如果大家还需要额外信息,我会及时补充,谢谢
2168 次点击
所在节点    程序员
22 条回复
xbo586
106 天前
个人理解。网关确实不应该掺杂多余业务逻辑,但是通过你的描述,只是类似于日志的功能,所以我认为在网关里做持久化是没问题的。至于数据结构问题,根据经验用 json 是最好的,也可以解决你的问题,毕竟你的请求数据结构也不清晰。然后就是你所讲的“对于后者,子模块接口的接受类型就固定了,都是“参数信息存储地址””,这种方案不可取,没必要在一个数据请求链条中增加一次接口信息的重复读。最后,我建议 20 楼的做法,将你所描述的扫描任务抽象成固定“规则”。
abcbuzhiming
105 天前
@steelshadow39
然后会设定这个扫描任务定期执行一次,我纠结的就是每次执行如何获取第一次请求中的参数配置
=======
这个想法好奇怪啊,你的任务第一次如何执行的,后面就如何执行。何来不能复用第一次请求中的参数呢?参数用 json ,甚至用 queryStr 键值对都能完成这个任务啊

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

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

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

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

© 2021 V2EX