Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 实现超时的设计模式_Design Patterns - Fatal编程技术网

Design patterns 实现超时的设计模式

Design patterns 实现超时的设计模式,design-patterns,Design Patterns,我正在尝试为我的服务设计操作超时逻辑。每个操作都与多个下游服务交互(同步和异步)。其目的是能够在一定时间后终止操作,而不管状态如何 解决方案中是否有可以利用的设计模式?您可以使用它来访问下游服务,然后使用某种事件驱动的方法来处理成功/超时 公共接口ICallback{ 成功时的公共无效(DsObject); 公共void onTimeout(); } 您访问下游服务的方式可能如下所示: 公共类下行连接器实现可调用{ @凌驾 公共对象调用(){ //在这里调用您的下游服务 返回。。。 } }

我正在尝试为我的服务设计操作超时逻辑。每个操作都与多个下游服务交互(同步和异步)。其目的是能够在一定时间后终止操作,而不管状态如何

解决方案中是否有可以利用的设计模式?

您可以使用它来访问下游服务,然后使用某种事件驱动的方法来处理成功/超时

公共接口ICallback{
成功时的公共无效(DsObject);
公共void onTimeout();
}
您访问下游服务的方式可能如下所示:

公共类下行连接器实现可调用{
@凌驾
公共对象调用(){
//在这里调用您的下游服务
返回。。。
}
}
然后,您可以将可调用项包装在
Future
周围,以调用下游服务并检查超时

final ICallback callback=new MyCallbackHandler();
最终下游连接器=新的下游连接器()
executor服务executor=。。。
未来=执行者提交(连接器);
试一试{
DsObject result=future.get(超时,时间单位为毫秒);
//操作完成
callback.onSuccess(结果);
}捕获(TimeoutException例外){
记录器错误(“操作超时”,ex);
future.cancel(true);
//超时
callback.onTimeout();
}

只是一个注释:
future.cancel(true)
不会停止正在运行的底层任务,它只是将正在运行的线程的中断标志设置为true。您的代码负责检查此标志并在其为真时抛出
InterruptedException



如果您真的想使用设计模式,这听起来像是观察者模式。它将向观察员发出信号。对于async,您只需要向其发布消息即可。