@Scope(value=PROTOTYPE) public interface RPCFilter
RPC调用的过滤器,客户端可以通过实现ClientFilter 消费端扩展 ServerFilter 服务端扩展 BlockAwareFilter 知晓阻塞的扩展 Order 调用排序RPCFilter来将自己的逻辑植入到HSF的调用流程中 ┌--------------------------------------------------------------------------------┐ | com.taobao.hsf.invocation.filter.RPCFilterBuilder$HeadNode | └--------------------------------------------------------------------------------┘ | nextHandler.invoke(invocation); ^ v | onResponse(invocation, rpcResult) ┌--------------------------------------------------------------------------------┐ | com.taobao.hsf.invocation.filter.TestFilter1 | └--------------------------------------------------------------------------------┘ | nextHandler.invoke(invocation); ^ v | onResponse(invocation, rpcResult) ┌--------------------------------------------------------------------------------┐ | com.taobao.hsf.invocation.filter.TestFilter2222222 | └--------------------------------------------------------------------------------┘ | nextHandler.invoke(invocation); ^ v | onResponse(invocation, rpcResult) ┌--------------------------------------------------------------------------------┐ | com.taobao.hsf.invocation.filter.RPCFilterBuilder$TailNode | └--------------------------------------------------------------------------------┘ | ^ v | nextHandler.invoke(invocation); ------同步或者异步-------> future.set(rpcResult); 用户可以如下的方式扩展:@Order(2)public class TestFilter2222222 implements ServerFilter {@Overridepublic ListenableFutureinvoke(InvocationHandler invocationHandler, Invocation invocation) throws Throwable {System.out.println("Before TestFilter2 invoke");System.out.println("TestFilter2 invoke...");invocation.put("B", 2);ListenableFutureresult = invocationHandler.invoke(invocation); System.out.println("After TestFilter2 invoke");return result;}@Overridepublic void onResponse(Invocation invocation, RPCResult rpcResult) {System.out.println("TestFilter2 on " + Thread.currentThread());System.out.println("TestFilter2 onResponse. got " + rpcResult.getAppResponse());}}如果需要在invoke(InvocationHandler, Invocation)过程中提前返回(中断当前的调用链),通过使用 { com.taobao.hsf.util.concurrent.Futures#createSettableFuture()}来创建一个{ SettableFuture}并完成设置,同时返回 如果扩展点在后端,而前端提前结束,需要知道结束的情况,可以实现{ BlockAwareFilter}
Created by sixie.xyn on 2015/11/13.
| 限定符和类型 | 方法和说明 |
|---|---|
ListenableFuture<RPCResult> |
invoke(InvocationHandler nextHandler,
Invocation invocation)
当调用当前的
RPCFilter时,会将下一步执行的InvocationHandler传递进来,如果不执行
invocationHandler.invoke(invocation);
则当前调用链就此终结
// * 可以通过{ com.taobao.hsf.util.concurrent.Futures#createSettableFuture()}
提供的方法构建ListenableFuture
|
void |
onResponse(Invocation invocation,
RPCResult rpcResult)
响应写回
当数据抵达,结果将会通过该方法写回,回调该接口
一般是结果抵达,调用{ SettableFuture}的set方法,将会触发以往调用链的
onResponse(Invocation, RPCResult)方法
|
ListenableFuture<RPCResult> invoke(InvocationHandler nextHandler, Invocation invocation) throws Throwable
当调用当前的RPCFilter时,会将下一步执行的InvocationHandler传递进来,如果不执行invocationHandler.invoke(invocation);则当前调用链就此终结 // * 可以通过{ com.taobao.hsf.util.concurrent.Futures#createSettableFuture()} 提供的方法构建ListenableFuture
nextHandler - 下一环调用者invocation - 当前调用Throwable - 调用异常,一般调用中不建议抛出异常void onResponse(Invocation invocation, RPCResult rpcResult)
响应写回
当数据抵达,结果将会通过该方法写回,回调该接口
一般是结果抵达,调用{ SettableFuture}的set方法,将会触发以往调用链的onResponse(Invocation, RPCResult)方法
invocation - 当前调用rpcResult - 调用的结果Copyright © 2018. All rights reserved.