背景
java.lang.RuntimeException: [source error] not available in a static method: handlere
RPC调用过程
首先简单了解下RPC调用过程:
1、 服务消费方(client)调用以本地调用方式调用服务;
2、client stub
接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体(序列化);
3、client stub
找到服务地址,并将消息(字节数组)发送到服务端;
4、server stub
收到消息后进行解码(反序列化);
5、server stub
根据解码结果调用本地的服务;
6、本地服务执行并将结果返回给server stub
;
7、server stub
将返回结果打包成消息并发送至消费方;
8、client stub
接收到消息,并进行解码(反序列化)
9、消费方得到最终结果;
分析
上面的client stub
可以简单理解为是客户端的动态代理生成的服务接口的代理类;
代理类的生成方式:在服务启动时,在Proxy.getProxy中使用javaassit动态生产接口
解决
根据实际使用场景,consumer中不会调用服务接口的static方法,就算调用也不需要使用代理,所以修改为在代理类不生成static的代理方法;
修改为: