guide-rpc-framework icon indicating copy to clipboard operation
guide-rpc-framework copied to clipboard

try住了异常为何还要throw出去?

Open thinksee opened this issue 4 years ago • 3 comments

https://github.com/Snailclimb/guide-rpc-framework/blob/311019140e41968f01c122fc170ee0df187df42f/rpc-framework-simple/src/main/java/github/javaguide/registry/zk/util/CuratorUtils.java#L58

thinksee avatar Oct 30 '20 09:10 thinksee

把异常统一封装成自定义异常RpcException,同时将真正的异常作为参数。比如redis客户端,操作的时候可能出现网络超时,这种超时统一封装为redis自定义异常。 切记不可滥用。

hutaishi avatar Nov 01 '20 16:11 hutaishi

https://github.com/Snailclimb/guide-rpc-framework/blob/311019140e41968f01c122fc170ee0df187df42f/rpc-framework-simple/src/main/java/github/javaguide/registry/zk/util/CuratorUtils.java#L58

之前这里有一点参考 dubbo 的做法。其实,我觉得直接将异常通过log.error打印出来就好。

image

Snailclimb avatar Nov 02 '20 08:11 Snailclimb

这种写法没问题的, 很多框架都这么用.但是最好的方式肯定是日志框架.

捕获的目的就是打印, 要么日志框架打印,要么system.

抛出一个new 异常 也是打印,printStackTrace().

有时候不方便引入日志框架,又不想直接system.

比如一个方法未实现逻辑,就可以直接抛出new 异常,当执行一个逻辑发生错误,也可以抛出new异常.

捕获异常后,直接抛出new异常,最终还是通过system打印的(会阻塞一下,毕竟是同步打印的,所以才会有日志框架代替,因为日志框架都支持异步).

如果不能忍受抛new异常的阻塞,那就用日志框架代替.

tcmot avatar Jun 29 '21 12:06 tcmot