微服务下如何处理路由已经超时,对应的业务却执行成功

fightingAllTheDay 发布于 2020/04/22 12:38
阅读 672
收藏 0

目前会遇到这样的问题,feign 配置了一个合适的超时时间,请求到某个服务中因为业务处理时间耗时较多(服务器压力大的情况)导致了feign直接响应给客户端超时,业务最终成功执行。

目前处理的策略就是 1. 调大了超时时间;2. 客户端得到超时的信息后会提示用户稍后刷新一下看结果。

大家是怎么处理这种情况的?

加载中
0
Joyzhou
Joyzhou

耗时操作不建议实时返回处理结果,加入中间状态不好么

1
跟猪谈理想
跟猪谈理想

这得看调用方对业务执行结果关心不关心。 如果关心, 超时的话 , 可以采用查询或者通知 进行状态一致处理。如果不关心执行结果, 那超时, 就超时了。 不用处理

0
Kit_lee
Kit_lee

目前还没有这么重的业务调用,但我想你的策略之中,1、是肯定能用的。如果不加大超时时间,我更偏向后端微服务的API实现异步处理-->通知的方式实现我想要的效果,而不是一直等待API返回。

当然前端如何优化体验也有多种方法,如轮询、长连接等等。能不显示那么长的loading,尽量不显示。因为等待的焦燥很容易让用户做出一些你不希望发生的动作

f
fightingAllTheDay
谢谢建议.
0
dongjunv5
dongjunv5

不知道用socket行不行

dongjunv5
dongjunv5
回复 @fightingAllTheDay : 是的
f
fightingAllTheDay
回复 @dongjunv5 : 知道。异步操作业务后,socket通知客户端,客户端不用长时间等待
dongjunv5
dongjunv5
回复 @fightingAllTheDay : 没有 只是一个想法,你能明白什么意思吗
f
fightingAllTheDay
有在生产环境下用吗
0
k
kingMH

这种情况要么优化 业务处理,要么直接告诉前端已经接受任务然后异步执行任务

0
xiexieyou
xiexieyou

可以异步的话优先异步  

0
喜之郎
喜之郎

你说的两种方案都是可行的,要看具体业务。总之要达到最终一致性。

另外如果可以实现幂等性,客户端可以重新调用接口。如果不好实现,可以要求服务器成功后回调客户端,如果一次回调不行,那就多次。微信支付回调不就是这种场景么。

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部