Hystrix事件监听的使用(二)
除了HystrixCommandExecutionHook
事件监听器之外,Hystrix还提供了其他几种事件监听器,可以在命令执行的不同阶段进行监听和处理。
HystrixCommandExecutionStartedHook
HystrixCommandExecutionStartedHook
事件监听器会在命令开始执行之前被调用,可以用来记录命令开始执行的时间等信息。
以下是一个示例代码:
public class MyHystrixCommand extends HystrixCommand<String> {
private final Logger logger = LoggerFactory.getLogger(MyHystrixCommand.class);
protected MyHystrixCommand() {
super(HystrixCommandGroupKey.Factory.asKey("MyHystrixCommandGroup"));
}
@Override
protected String run() throws Exception {
// 执行命令逻辑
return "success";
}
public static void main(String[] args) {
HystrixPlugins.getInstance().registerCommandExecutionHook(new HystrixCommandExecutionStartedHook() {
@Override
public <T> void onStart(HystrixInvokable<T> commandInstance) {
super.onStart(commandInstance);
if (commandInstance instanceof MyHystrixCommand) {
MyHystrixCommand myCommand = (MyHystrixCommand) commandInstance;
myCommand.logger.info("Command execution started");
}
}
});
String result = new MyHystrixCommand().execute();
System.out.println(result);
}
}
在这个示例中,我们实现了一个继承自HystrixCommand
的MyHystrixCommand
命令,该命令总是返回一个成功的结果。
我们在main
方法中注册了一个HystrixCommandExecutionStartedHook
事件监听器,该监听器会在命令开始执行之前记录一条日志。具体来说,我们在onStart
方法中判断命令实例是否为MyHystrixCommand
,如果是,则将一条“Command execution started”的日志记录到MyHystrixCommand
的日志对象中。
最后,我们调用MyHystrixCommand
的execute
方法来执行该命令,并打印出结果。
HystrixCommandExecutionCompletedHook
HystrixCommandExecutionCompletedHook
事件监听器会在命令执行完成之后被调用,可以用来记录命令执行完成的时间、结果等信息。
以下是一个示例代码:
public class MyHystrixCommand extends HystrixCommand<String> {
private final Logger logger = LoggerFactory.getLogger(MyHystrixCommand.class);
protected MyHystrixCommand() {
super(HystrixCommandGroupKey.Factory.asKey("MyHystrixCommandGroup"));
}
@Override
protected String run() throws Exception {
// 执行命令逻辑
return "success";
}
public static void main(String[] args) {
HystrixPlugins.getInstance().registerCommandExecutionHook(new HystrixCommandExecutionCompletedHook() {
@Override
public <T> void onCompleted(HystrixInvokable<T> commandInstance, T response) {
super.onCompleted(commandInstance, response);
if (commandInstance instanceof MyHystrixCommand) {
MyHystrixCommand myCommand = (MyHystrixCommand) commandInstance;
myCommand.logger.info("Command execution completed with response: " + response);
}
}
@Override
public <T> void onCompleted(HystrixInvokable<T> commandInstance, T response, long duration, TimeUnit timeUnit, boolean successfulExecution) {
super.onCompleted(commandInstance, response, duration, timeUnit, successfulExecution);
if (commandInstance instanceof MyHystrixCommand) {
MyHystrixCommand myCommand = (MyHystrixCommand) commandInstance;
myCommand.logger.info("Command execution took " + duration + " " + timeUnit.name() + " and " + (successfulExecution ? "succeeded" : "failed") + " with response: " + response);
}
}
});
String result = new MyHystrixCommand().execute();
System.out.println(result);
}
}
在这个示例中,我们在main
方法中注册了一个HystrixCommandExecutionCompletedHook
事件监听器,该监听器会在命令执行完成之后记录一条日志。具体来说,我们实现了onCompleted
方法,该方法会在命令执行完成之后被调用,参数response
代表命令执行的结果。
我们在onCompleted
方法中判断命令实例是否为MyHystrixCommand
,如果是,则将一条“Command execution completed with response: ”的日志记录到MyHystrixCommand
的日志对象中,并输出命令执行的结果。
此外,我们还重载了onCompleted
方法,该方法会在命令执行完成之后被调用,参数duration
代表命令执行的时间,timeUnit
代表时间单位,successfulExecution
代表命令是否执行成功。
最后,我们调用MyHystrixCommand
的execute
方法来执行该命令,并打印出结果。
相关文章
- Node 事件循环知多少
- vue.js中实现阻止事件冒泡
- Touch 移动设备上的 手势识别 与 Js事件库
- Pylirt:一款功能强大的Linux事件响应工具套件
- Qt状态更改事件
- 【EventBus】EventBus 事件总线框架简介 ( EventBus 使用流程 )
- 【Kotlin 协程】协程中的多路复用技术 ② ( select 函数原型 | SelectClauseN 事件 | 查看挂起函数是否支持 select )
- Hystrix事件监听的使用(一)
- mysql存储过程和事件详解数据库
- even事件 浏览器兼容性详解编程语言
- Oracle 等待事件 direct path sync 官方解释,作用,如何使用及优化方法
- Oracle 等待事件 free buffer waits 官方解释,作用,如何使用及优化方法
- Oracle 等待事件 gc current block direct read 官方解释,作用,如何使用及优化方法
- Oracle 等待事件 pending global transaction(s) 官方解释,作用,如何使用及优化方法
- Oracle 等待事件 read by other session 官方解释,作用,如何使用及优化方法
- Oracle 等待事件 Redo Transport Slave Startup 官方解释,作用,如何使用及优化方法
- Oracle 等待事件 RVWR wait for flashback copy 官方解释,作用,如何使用及优化方法
- Oracle 等待事件 SQL*Net message to client 官方解释,作用,如何使用及优化方法
- Oracle 等待事件 undo segment recovery 官方解释,作用,如何使用及优化方法
- Oracle 等待事件 Enqueues:MR,MediaRecovery 官方解释,作用,如何使用及优化方法
- Oracle 等待事件 Enqueues:UL,User-definedLocks 官方解释,作用,如何使用及优化方法
- 深入了解MySQL事件状态:优化数据库任务和增强性能(mysql事件状态)
- 黑客攻击事件频发 欧科云链链上天眼为链上安全护航
- jQuery中的常用事件总结
- iframe的onreadystatechange事件在firefox下的使用
- windowresize和scroll事件的基本优化思路
- Cocos2d-x触摸事件实例