处理重复的相同rest请求 java Spring

sf6xfgos  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(277)

有这样一组模块

front向api发送rest请求。
api(restcontroller)生成correlationid并通过mq向队列发送消息。根据请求,它通过指定操作代码来路由消息。
进程从队列接收消息,然后根据操作代码执行一些处理。
问题是该进程可以处理数据大约5分钟(其他外部服务速度较慢)。如果响应在1分钟内没有从api发送到front,它将向api重新发送请求。
我需要这样做,当您收到完全相同的新请求时,旧请求会给出一个响应(不管怎样,因为前面没有等待应答),而新发送的消息在mq队列中,并等待应答,而不是第一个模块进程。最后一个活动请求应该等待mq响应,并将正常响应返回到front,但只返回到最近的响应。
这个问题有现成的解决方案或算法吗?
感谢您的关注!

kr98yfug

kr98yfug1#

如果可能会重新发送请求,则需要区分传入的请求是重复请求还是新请求,然后可以适当地处理它。
为了区分这一点,我将在会话中添加一个请求计数器。在每一个成功的响应中,客户机将得到一个增加的请求计数器。如果客户机在没有收到响应的情况下发送请求,那么它将发送与前一个请求具有相同请求计数器值的请求,这样服务器就可以看到已经有挂起的东西。

相关问题