- 创建 dubbo 的filter
(com.alibaba.dubbo.rpc.Filter)
import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.extension.Activate;
import com.alibaba.dubbo.rpc.*;
import com.alibaba.dubbo.rpc.service.GenericService;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
//该类只在生产者生效
@Activate(group = { Constants.PROVIDER })
@Component
@Slf4j
public class ParamFilter implements Filter {
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
log.info("InterfaceName={},MethodName={},Parameter={}", invocation.getInvoker().getInterface().getName(),
invocation.getMethodName(), invocation.getArguments());
// 开始时间
long startTime = System.currentTimeMillis();
// 执行接口调用逻辑
Result result = invoker.invoke(invocation);
// 调用耗时
long elapsed = System.currentTimeMillis() - startTime;
// 如果发生异常 则打印异常日志
if (result.hasException() && invoker.getInterface() != GenericService.class) {
log.error("dubbo执行异常: ", result.getException());
} else {
log.info("InterfaceName={},MethodName={},Resposne={},SpendTime={} ms",
invocation.getInvoker().getInterface().getName(), invocation.getMethodName(),
JSON.toJSONString(new Object[] { result.getValue() }), elapsed);
}
// 返回结果响应结果
return result;
}
}
- 在resource目录下创建META-INF.dubbo目录,新建filter文件
paramFilter=xxx.xxx.ParamFilter (xxx代表包名)
- 在dubbo接口类,添加注解 filter
@Service(interfaceClass = IConfigDubboService.class, version = "1.0.0", timeout = 240000,filter = "paramFilter")
@Component
@Slf4j
public class ConfigDubboServiceImpl implements IConfigDubboService {}