-
Notifications
You must be signed in to change notification settings - Fork 11
ExceptionHandler
恒宇少年 edited this page Sep 9, 2020
·
3 revisions
ExceptionHandler是操作消息管道(MessagePipe)内的消息(Message)时遇到异常的处理器,默认使用ConsoleExceptionHandler进行打印异常的堆栈信息。
目前触发的地方有三个,分别是:
- 向消息管道内写入单个消息时(MessagePipe#putLast)
- 处理消息管道内第一个消息时(MessagePipe#handleFirst)
- 处理消息管道内的全部消息时(MessagePipe#handleToLast)
目前默认的作用是打印处理具体消息时的异常堆栈信息,方便我们定位异常。
也可以定义一些其他的用途,比如:
- 邮件通知
- 异常报表统计
- 缓存异常消息
- ...
/**
* 自定义邮件通知{@link ExceptionHandler}
*
* @author 恒宇少年
*/
@Component
@Slf4j
public class EmailNotificationExceptionHandler implements ExceptionHandler {
@Override
public void handleException(Exception exception, Object target) {
// 处理的消息对象,该对象可能为空
if (!ObjectUtils.isEmpty(target)) {
Message message = (Message) target;
log.info("消息内容:{}", JsonUtils.objectToJson(message));
}
// 输出异常堆栈
log.error(exception.getMessage(), exception);
// 处理邮件通知逻辑
}
}上面是实现ExceptionHandler接口的一个自定义发送邮件的异常处理器示例。
替换默认的异常处理器即让我们自定义的异常处理器生效,我们可以通过MessagePipeConfiguration#setExceptionHandler方法来实现,如下所示:
/**
* 邮件通知异常处理
*/
@Autowired
private EmailNotificationExceptionHandler emailNotificationExceptionHandler;
@Bean
public MessagePipeConfiguration messagePipeConfiguration() {
MessagePipeConfiguration configuration = MessagePipeConfiguration.defaultConfiguration();
// 替换默认异常处理器
configuration
.setExceptionHandler(emailNotificationExceptionHandler)
return configuration;
}- Server
- Client