dubbo源码阅读-Filter默认实现(十一)之TimeoutFilter

/**
 * Log any invocation timeout, but don't stop server from running
 * 服务于服务提供者
 */
@Activate(group = Constants.PROVIDER)
public class TimeoutFilter implements Filter {

    private static final Logger logger = LoggerFactory.getLogger(TimeoutFilter.class);

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        //获得开始时间
        long start = System.currentTimeMillis();
        //执行调用
        Result result = invoker.invoke(invocation);
        //计算耗时
        long elapsed = System.currentTimeMillis() - start;
        //超过提供者配置的timeout 配置 则打印告警日志
        if (invoker.getUrl() != null
                && elapsed > invoker.getUrl().getMethodParameter(invocation.getMethodName(),
                "timeout", Integer.MAX_VALUE)) {
            if (logger.isWarnEnabled()) {
                logger.warn("invoke time out. method: " + invocation.getMethodName()
                        + " arguments: " + Arrays.toString(invocation.getArguments()) + " , url is "
                        + invoker.getUrl() + ", invoke elapsed " + elapsed + " ms.");
            }
        }
        return result;
    }

}

 

posted @ 2020-03-16 17:27  意犹未尽  阅读(311)  评论(0编辑  收藏  举报