协议的超时处理

在应用间进行协议交互时,经常会遇到需要处理超时。

预估协议应当返回时,当协议未正常返回时进行重试或者容错处理。

在成熟的应用架构中,协议的超时处理机制应该是自动的回调模式,开发者一般不用亲自去实现超时的触发,而只用处理超时的业务逻辑。

如何触发超时呢?

一个很重要的问题就是协议的上下文的保存,也就是协议请求参数的保存,在处理超时时这些参数需要传递给业务处理逻辑,同时在处理协议返回逻辑时也会用到请求参数。

一般情况下协议对象将一直保存在内存当中,通过启动定时器来触发超时,且在协议返回时取消定时任务。

此时又有同步和异步两种方式。

在Java中,异步比较好实现,定时任务回调即可,通过将每个等待返回的协议进行编号,并且将编号和协议参数即上下文映射保存,定时任务异步通过编号回调通知该映射,响应成功则删除内容,超时,则通过编号来查询到上下文回调超时处理,并且一般此类协议的协议返回不需要手动发送,在回调结束后自动调用;

同步的实现可以通过继承FutureTask类来实现

彻底理解Java的Future模式 - 大诚挚 - 博客园​www.cnblogs.com/cz123/p/.html

此文介绍了FutureTask的使用,同步调用时通过将Result设置为FutureTask的result,并在协议返回时设置该Result值,此时会主动notify之前的get线程,就实现了协议的同步返回调用

其实此类逻辑的处理都是在协议接受处理之前和协议接受处理以后做了代理设计,增强了功能