use of com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean in project LinkAgent by shulieTech.
the class MQConsumeMessageTraceLog method consumeMessageBefore.
public static void consumeMessageBefore(MQTraceContext ctx) {
if (ctx == null || ctx.getTraceBeans() == null || ctx.getTraceBeans().size() == 0 || ctx.getTraceBeans().get(0) == null) {
return;
}
// 记录第一条消息处理开始的时间
ctx.setStartTime(System.currentTimeMillis());
// 记录第一条消息开始消费
// 由于是批量处理,没办法区分消费的调用具体属于哪个消息的调用链
// 因此,后续消费的调用挂在第一条消息所在的调用链上
MQTraceBean MQTraceBean = ctx.getTraceBeans().get(0);
recordSingleMsgBeforeConsume(ctx, MQTraceBean, null);
ClusterTestUtils.validateClusterTest();
}
use of com.pamirs.attach.plugin.apache.rocketmq.common.MQTraceBean in project LinkAgent by shulieTech.
the class MQConsumeMessageTraceLog method consumeMessageAfter.
public static void consumeMessageAfter(MQTraceContext ctx) {
if (ctx == null || ctx.getTraceBeans() == null || ctx.getTraceBeans().size() == 0) {
return;
}
// 批量消息全部处理完毕的时间
long currentTime = System.currentTimeMillis();
// 批量消息全部处理完毕的平均耗时
long costTime = (currentTime - ctx.getStartTime()) / ctx.getTraceBeans().size();
ctx.setCostTime(costTime);
String firstTrace = Pradar.getTraceId();
// 记录第一条消息结束消费,默认配置一次只消费一条消息时本方法到此结束
if (MQType.ROCKETMQ.equals(ctx.getMqType())) {
if (ctx.isSuccess()) {
Pradar.endServerInvoke(ResultCode.INVOKE_RESULT_SUCCESS, MiddlewareType.TYPE_MQ);
} else {
Pradar.response(ctx.getErrorMsg());
Pradar.endServerInvoke(ResultCode.INVOKE_RESULT_FAILED, MiddlewareType.TYPE_MQ);
}
}
// 如果是批量消息需要特殊处理,后面只是记录一个处理结束的点
if (ctx.getTraceBeans().size() > 1) {
// 批量埋点,因为第一条消息结束消费时已记录,所以从第二条消息开始记录
for (int i = 1; i < ctx.getTraceBeans().size(); i++) {
MQTraceBean MQTraceBean = ctx.getTraceBeans().get(i);
recordSingleMsgBeforeConsume(ctx, MQTraceBean, firstTrace);
Pradar.endServerInvoke(MiddlewareType.TYPE_MQ);
}
}
}
Aggregations