问题描述
今天现场用户通知我们现场日志压测时发现mq消息一直未接收。
导出线程日志后定位相关伪代码如下:
erroMethod();//报错方法
try{
doOther();
}finally{
sendMq();
}
问题原因
try块外的代码报错,程序直接停止运行,所以finally内的代码不会执行。
fianlly执行顺序Demo
public static void preFinally(){
int i = 1/0; //报错程序直接停止,不会执行fianlly代码块
try{
}finally {
System.out.println("pre finally");
}
}
public static void postFinally(){
// 报错后执行finally
try{
int i = 1/0;
}finally {
System.out.println("post finally");
}
}