V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lvxiaomao
V2EX  ›  程序员

求教:如何做下游 RPC 返回结果的业务监控

  •  
  •   lvxiaomao · 170 天前 · 1131 次点击
    这是一个创建于 170 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    目前代码不可避免的调用下游 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();
    }
    

    第二种:定义 function ,把对下游 rpc 的调用放到 function 统一处理

    目前更倾向第二种方式,但是想知道还有更好的方式吗?

    9 条回复    2024-07-16 16:35:09 +08:00
    adrianzhang
        1
    adrianzhang  
       170 天前
    还有一种方法,就是不用 try ,出错直接退出,用 crontab 周期脚本,先判断进程在不在,不在的话启动程序,在的话啥也不干。
    securityCoding
        2
    securityCoding  
       170 天前 via Android
    统一封装一个代理?
    laminux29
        3
    laminux29  
       170 天前
    历史的做法是消息总线,类似于消息中间件。

    想简单搞搞可以直接抓日志,但缺点是实时性差,容易存在业务数据与日志数据不一致等问题。

    想要要求高一点,就得改写业务,把监控集成到业务代码里,但这工作量就巨大了,你需要对每个业务调用进行分析、埋点。
    xiaopengm
        4
    xiaopengm  
       169 天前
    aop ?
    xiaokongwu
        5
    xiaokongwu  
       169 天前
    各类 HttpClient ,都有类似 Interceptor 的能力吧,实在没有搞个 AOP 也行啊
    lvxiaomao
        6
    lvxiaomao  
    OP
       167 天前
    @xiaopengm 我们去调用别人内容,并且在方法内部就把下游 response 解析了;所以 aop 也不行,aop 做不到解析方法内部的东西
    lvxiaomao
        7
    lvxiaomao  
    OP
       167 天前
    @securityCoding 这总感觉跟定义 function 是不是差不多
    lvxiaomao
        8
    lvxiaomao  
    OP
       167 天前
    @laminux29 是的,在业务里面些日志和监控打点会比较麻烦,而且有些同学可能没有写的习惯 就容易遗漏; 想的是让别人不关心这些日志和监控这种通用的东西,就直接些业务代码就好了
    securityCoding
        9
    securityCoding  
       167 天前
    @lvxiaomao #7 差不多的,function 实现也是代理装饰作用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1371 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 17:19 · PVG 01:19 · LAX 09:19 · JFK 12:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.