[FDBUS 4.2]fdbus消息发送失败后的流程处理
任何通信中间件的消息发送都是存在发送失败的情况的,今天我们来梳理fdbus消息发送失败后的流程处理。
fdbus的消息均以CFdbMessage的格式来封装,并建其作为一个CBaseJob来进行入队和出队操作。CBaseJob被出队消耗时就会调用run()方法,在run()中执行消息发送逻辑,如下所示
上面箭头所示均为消息发送逻辑,以doRequest为例
消息发送有重试上限,如果在重试上限达到后,消息仍然未发完,则表示消息发送失败
通过fatalError修改相关标志位
而CFdEventLoop::buildFdArray()需要通过此标志位进行fatal_error_watches的添加处理(Line145),并最终执行CSysFdWatch的删除操作(Line173)
由于CFdbSession是CSysFdWatch的子类,因此会触发CFdbSession的析构。
如果fdbus client端的重连标志位都设置了(Line72),那么就会重新向name_server请求服务端地址(Line80),并发起连接(Line86)
以上便是fdbus消息发送失败后触发重连的所有逻辑处理。