目前代码不可避免的调用下游 rpc ,并拿到 response 做解析;
目前有想到的就是 2 种方式:
public List<Object> functionName(List<Long> ids) { if (CollectionUtils.isEmpty(ids)) { return Collections.emptyMap(); } Request req = new Request(); try { Response resp = rpcClient.rpcFuction(req); if (resp.success) { // 处理返回值 } else { log.error("打印 error 日志"); cat.xxxx; // 做业务打点,做监控 } } catch (Exception e) { log.error("打印 error 日志"); } return Collections.emptyMap(); }
目前更倾向第二种方式,但是想知道还有更好的方式吗?
![]() | 1 adrianzhang 2024-07-13 20:40:35 +08:00 还有一种方法,就是不用 try ,出错直接退出,用 crontab 周期脚本,先判断进程在不在,不在的话启动程序,在的话啥也不干。 |
2 securityCoding 2024-07-13 21:19:03 +08:00 via Android 统一封装一个代理? |
3 laminux29 2024-07-13 22:19:19 +08:00 历史的做法是消息总线,类似于消息中间件。 想简单搞搞可以直接抓日志,但缺点是实时性差,容易存在业务数据与日志数据不一致等问题。 想要要求高一点,就得改写业务,把监控集成到业务代码里,但这工作量就巨大了,你需要对每个业务调用进行分析、埋点。 |
4 xiaopengm 2024-07-14 11:47:42 +08:00 aop ? |
5 xiaokongwu 2024-07-14 19:26:05 +08:00 各类 HttpClient ,都有类似 Interceptor 的能力吧,实在没有搞个 AOP 也行啊 |
![]() | 6 lvxiaomao OP @xiaopengm 我们去调用别人内容,并且在方法内部就把下游 response 解析了;所以 aop 也不行,aop 做不到解析方法内部的东西 |
![]() | 7 lvxiaomao OP @securityCoding 这总感觉跟定义 function 是不是差不多 |
![]() | 8 lvxiaomao OP @laminux29 是的,在业务里面些日志和监控打点会比较麻烦,而且有些同学可能没有写的习惯 就容易遗漏; 想的是让别人不关心这些日志和监控这种通用的东西,就直接些业务代码就好了 |
9 securityCoding 2024-07-16 16:35:09 +08:00 @lvxiaomao #7 差不多的,function 实现也是代理装饰作用 |