调用端组装好参数后最后会调用jsf client的sendMsg方法
在这里面会把消息体进行编码和序列化默认的序列化方式是msgpack
Netty服务端ServerChannelHandler生成一个任务执行ServerChannelHandler监听到消息体
生成一个任务
JSFTask调用doRun方法执行
void doRun() {
…
//获取一个执行器
Invoker invoker = this.serverHandler.getOwnInvoker(className, aliasName);
…
//通过反射执行方法
responseMessage = invoker.invoke(this.msg);
。。。
//序列化和编码
buf = ProtocolUtil.encode(responseMessage, buf);
…
//将结果回传给客户端
TraceUtils.rpcServerSend(this.msg, responseMessage.getException(), responseSize, isBizException);
}
其中invoker.invoke(this.msg);会调用服务器代理类ProviderProxyInvoker去执行。
ProviderProxyInvoker链式调用过滤器,最后一个过滤器是ProviderInvokeFilter。
ProviderInvokeFilter根据消息体中的接口名称和方法名称通过反射执行代码,并把结果返回给调用者。
图2 生成method对象
图3 通过反射执行 获取执行结果