from:http://blog.csdn.net/doctor_who2004/article/details/48877591
dubbo 自定义过滤器,打印接口调用信息
dubbo提供了web filter类似的com.alibaba.dubbo.rpc.Filter,这样,我们可以在dubbo提供的服务提供方和消费方都可以自定义过滤器,从而可以获得方法调用的时间或参数、返回结果及异常信息。我们可以利用log打印出来。而且,这个过滤器机制,也是分布式跟踪系统的一部分。
下面代码实例是一个自定义过滤器例子,获得方法调用的参数、返回结果、执行时间及异常信息的log功能。
- public class ElapsedTimeFilter implements Filter {
-
- private static Logger log = LoggerFactory
- .getLogger(ElapsedTimeFilter.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;
- if (invoker.getUrl() != null) {
-
-
- log.info("[{}], [{}], {}, [{}], [{}], [{}] ", invoker.getInterface(), invocation.getMethodName(),
- Arrays.toString(invocation.getArguments()), result.getValue(),
- result.getException(), elapsed);
-
- }
- return result;
- }
-
- }
其实,dubbo内部,也有很多已经实现好的不同功能的过滤器,如:
我们自定义了过滤器,还的按照dubbo spi机制,还得需要配置:
在服务消费方或提供方还需要配上这个过滤器,消费方例子:
- <dubbo:consumer id="xx"
-
- filter="elapsedTimeFilter"
-
- retries="0"/>
-
具体详见官方文档。
+
+
+
=
=
=
分享到:
相关推荐
Dubbo 提供了 `Filter` 机制,你可以自定义一个异常过滤器来捕获和处理异常。例如,创建一个名为 `CustomExceptionHandlerFilter` 的过滤器: ```java public class CustomExceptionHandlerFilter implements ...
4. **源码阅读与分析**:通过阅读Dubbo的源码,学习过滤器的内部工作原理,以及如何自定义过滤器以满足特定需求。 5. **开发实践与优化建议**:根据提供的文档和开发建议,理解如何在实际项目中合理运用过滤器,...
Dubbo提供了多种高级特性,如服务分组、版本控制、服务过滤器和容错机制等。通过这些特性,开发者可以更好地管理和维护复杂的分布式系统。 接着,Zookeeper作为一个分布式协调服务,是Dubbo实现服务注册与发现的...
Dubbo的过滤器机制允许在服务调用前后插入自定义逻辑,形成一个过滤器链。过滤器可以用来实现日志记录、性能监控、安全控制等功能,增强了系统的扩展性。 八、异步调用与回调 Dubbo支持同步调用和异步调用两种模式...
- 过滤器链:了解过滤器在Dubbo中的作用,以及如何编写自定义过滤器实现特定功能。 通过对《Dubbo源码分析系列》的学习,开发者不仅可以掌握Dubbo的基本使用,还能深入理解其设计思想,从而更好地在实际项目中应用...
接口,添加自定义过滤器,进行业务逻辑增强。 - **自定义Protocol**: 如果需要自定义通信协议,可以实现`com.alibaba.dubbo.remoting.Transporter`接口。 通过深入学习和实践"**dubbo-soa-consumer**"项目,开发者...
服务过滤器(Filter)是 Dubbo 中的一个强大特性,允许在服务调用前后添加自定义逻辑。开发者可以通过 `Filter` 属性添加过滤器,实现诸如日志记录、限流、鉴权等功能。 十、SPI 扩展机制 Dubbo 基于 Java SPI...
接口或使用 SPI 机制来添加自定义过滤器。 下面是一步步实现过滤器功能的步骤: 1. **创建过滤器类**: 创建一个新的 Java 类,实现 `Filter` 接口。例如,我们可以创建一个名为 `MyFilter` 的类: ```java ...
6. **过滤器(Filter)**:Dubbo支持自定义服务调用的过滤器,可以实现如日志记录、限流、熔断等功能。在`<dubbo:filter>`元素中添加过滤器配置,可以增强服务的安全性和稳定性。 7. **监控(Monitor)**:Dubbo还...
6. **扩展点**:Dubbo遵循插件化设计,允许开发者自定义服务过滤器、协议、序列化方式等。`dubbo-consumer`中可能包含这些扩展点的相关配置和实现。 三、实战应用 在实际开发中,`dubbo-consumer`模块的应用场景...
- **服务过滤器**:Dubbo支持自定义服务过滤器,用于对请求和服务结果进行预处理或后处理。 #### 五、Dubbo的扩展性 - **SPI(Service Provider Interface)**:Dubbo采用了SPI机制,使得用户可以轻松地替换或扩展...
6. **服务过滤器(Filter)**:服务过滤器允许在服务调用前后插入自定义逻辑,例如日志记录、性能监控、安全检查等。用户可以通过配置实现自己的过滤器,增强服务的可扩展性。 7. **服务调用模型(Invocation & ...
6. **过滤器(Filter)配置**:`<dubbo:filter>`允许添加自定义的业务逻辑或监控拦截器,增强了服务的可扩展性。 7. **其他扩展配置**:Dubbo.xsd还支持服务级别的配置,如服务质量控制、负载均衡策略、服务路由...
服务过滤器是Dubbo实现业务逻辑增强和处理的关键组件,可以插入到服务调用链中,执行额外的操作,如认证、限流、日志记录等。拦截器则提供了AOP(面向切面编程)的能力,可以在调用前后执行特定逻辑,进一步增强了...
8. **服务过滤器与拦截器**:Dubbo允许添加自定义的过滤器和拦截器,实现服务调用前后的扩展逻辑。源码会展示如何编写和注册这些组件。 9. **服务测试**:源码工程可能包含了单元测试和集成测试,用于验证服务的...
除了基本配置,`dubbo.xsd`还允许通过`<dubbo:filter>`标签添加自定义的过滤器,这样可以在服务调用前后执行特定的逻辑,实现服务拦截、日志记录、性能监控等功能。此外,通过`<dubbo:monitor>`可以设置监控中心,对...
包中,可以看到各种过滤器的实现,它们在调用链路中起到了处理异常、控制流量等作用。 6. **配置管理**:Dubbo的配置可以通过`com.alibaba.dubbo.config`包下的类进行管理,如`ApplicationConfig`、`ProviderConfig...
`StatFilter`是监控过滤器,会在每次调用前后记录相关信息。同时,Dubbo支持与其他监控系统集成,如Hadoop的Metrics2、Spring Boot Actuator等。 六、服务配置 Dubbo的配置可以通过XML、API、注解三种方式进行,`...
5. **Filter**:过滤器链,可以添加自定义拦截器来扩展功能。 调用流程大致如下: 1. 消费者通过`ReferenceConfig`创建服务引用。 2. 生成代理对象,调用代理方法时,会触发`Invoker`的调用。 3. `Invoker`根据负载...
9. **扩展性**:Dubbo.xsd允许开发者自定义扩展点,比如自定义协议、序列化方式、过滤器等,增强了框架的灵活性和可扩展性。 10. **部署与应用**:在实际项目中,开发者通常会创建一个基于dubbo.xsd的XML配置文件,...