RocketMQ消费打点监控

本文概述了在使用RocketMq时如何监控消息发送、消费、失败重试以及消费延迟,强调了业务异常处理和设置报警的重要性。通过实例讲解了如何在代码中实现打点和重试策略,以确保高效和及时的监控和问题排查。

背景 :

最近我们再用RocketMq 做消息消费 总结一下消费监控打点问题

rmq 消费监控 我们需要关注 发送了多少消息 ,然后 消费了多少 ,还有失败重试了多少次 (需要加报警)这几个点, 去整体的看一个消费者的消费情况

消费lag 的情况

1,消息发送

如果是自己是发送方最好自己在发送的时候上报打点

2.消息消费

消费入口上报 

3.消息失败

代码里tryCatch catch 里打点 并且要返回 LATER

返回LATER 消息会重试

4.消息lag

一些业务时效性敏感的 需要重点关注消息延迟时间

5.消息失败重试次数

rocketMq 是支持消息重试的 一共16 次 每次时间间隔不一样

在业务执行过程中可能有些网络抖动或者发布的case 导致消费失败,那消费失败的消息 我们应该要进行重试

如果我们失败次数过多 就需要我们去立刻看到底是什么原因导致消费失败

6, 业务异常

这个就需要取决于业务 

比如业务是需要更新一个商品的es 数据结果在消息体里 根据商品id 没有查到 商品数据,那这个时候 代码需要返回SUCCESS 还是返回LATER

也就是说是否要重试 

在开发中,**代码打点监控耗时**是指在关键代码段前后记录时间戳,以计算该段代码的执行时间,从而进行性能分析和优化。这种方式在 Android、Java、C++、Python 等各种语言中都适用。 --- ### ✅ Android/Java 示例: ```java long startTime = System.currentTimeMillis(); // 要监控的代码段 doSomeHeavyWork(); long duration = System.currentTimeMillis() - startTime; Log.d("Performance", "doSomeHeavyWork 耗时: " + duration + " ms"); ``` --- ### ✅ Kotlin 示例(Android): ```kotlin val startTime = System.currentTimeMillis() // 执行操作 doHeavyOperation() val duration = System.currentTimeMillis() - startTime Log.d("Performance", "耗时: $duration ms") ``` --- ### ✅ Python 示例: ```python import time start_time = time.time() # 执行操作 do_heavy_work() duration = time.time() - start_time print(f"耗时: {duration:.4f} 秒") ``` --- ### ✅ C++ 示例: ```cpp #include <chrono> #include <iostream> auto start = std::chrono::high_resolution_clock::now(); // 执行操作 doHeavyWork(); auto stop = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(stop - start).count(); std::cout << "耗时: " << duration << " ms" << std::endl; ``` --- ### ✅ 高级用法:AOP 或 注解处理器(Android) 使用 AOP(面向切面编程)框架如 **AspectJ**,可以实现非侵入式打点: ```java @Around("execution(* com.example.myapp.MyClass.myMethod(..))") public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { long start = System.currentTimeMillis(); Object result = joinPoint.proceed(); long duration = System.currentTimeMillis() - start; Log.d("AOP", joinPoint.getSignature() + " 耗时: " + duration + "ms"); return result; } ``` --- ### ✅ 注意事项: - 使用 `System.nanoTime()` 可以获得更高精度的时间戳(适用于短时间测量)。 - 不要频繁打印日志,避免影响性能。 - 在 Release 包中应关闭打点日志或使用日志上报机制。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值