feign与sentinel整合后如何设计异常返回更友好

来源:8-16 Feign整合Sentinel

明天525

2020-07-31

周老师,你好:
feign与sentinel整合后,视频中做的案例是触发流控或降级后返回的是DTO,
DTO交互的是业务数据,其属性也不包含需要给前端页面展示用的异常友好提示信息的字段,
1、假如加了异常字段是不是涉及上就不美观了或耦合了非业务数据?
2、必须根据接口返回DTO,那么Controller层根据DTO怎么区分是正常的数据或异常的情景,比如返回null来判断?
3、请问怎样设计代码才有合理的异常返回呢?
4、每次限流都要新new一个对象,这会不会影响性能呢?没有更好的办法了吗?

写回答

1回答

大目

2020-07-31

我课上说过,降级的目的,是为了让业务能在不正常的场景下(也就是正常调用挂了)还能走一个后备措施。这个后备措施,可以有损的支持业务。但是咱们的业务比较简单,一没缓存,二没分析平台,三没复杂业务的。所以我就直接返回了一个默认的结果。如果实际项目中,你某些业务没有后备措施,则根本无需降级。这个我在课上有解释过的哈^_^

降级并不是为了返回默认结果,否则就变成针对异常场景下,让返回结果更加友好了。


下面再来解答你具体的疑问:

1、假如加了异常字段是不是涉及上就不美观了或耦合了非业务数据?

什么是异常字段?这句子也不通顺啊……说实话没看懂。


2、必须根据接口返回DTO,那么Controller层根据DTO怎么区分是正常的数据或异常的情景,比如返回null来判断?

实际项目中并不一定是直接返回DTO,Controller一般也不用去感知什么时候是正常的,什么时候是降级的返回。


3、请问怎样设计代码才有合理的异常返回呢?

降级不是针对异常返回的友好处理

降级不是针对异常返回的友好处理

降级不是针对异常返回的友好处理

否则直接用Spring的统一异常处理不香嘛^_^,降级毕竟要写那么多代码……


4、每次限流都要新new一个对象,这会不会影响性能呢?没有更好的办法了吗?

如果你愿意,你可以弄个单例。不过new一个对象对性能的影响是微乎其微的。实际业务一般都不会考虑这种问题。

1
1
明天525
非常感谢!
2020-07-31
共1条回复

Spring Cloud Alibaba微服务从入门到进阶

面向未来微服务:熟练掌握Spring Cloud Alibaba

2979 学习 · 1299 问题

查看课程