Dubbo consumer消费端启动报错java.lang.RuntimeException: [source error] not available in a static method: h

背景

java.lang.RuntimeException: [source error] not available in a static method: handlere
Dubbo consumer消费端启动报错java.lang.RuntimeException: [source error] not available in a static method: h_第1张图片
Dubbo consumer消费端启动报错java.lang.RuntimeException: [source error] not available in a static method: h_第2张图片

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动态生产接口
Dubbo consumer消费端启动报错java.lang.RuntimeException: [source error] not available in a static method: h_第3张图片

解决

根据实际使用场景,consumer中不会调用服务接口的static方法,就算调用也不需要使用代理,所以修改为在代理类不生成static的代理方法;

Dubbo consumer消费端启动报错java.lang.RuntimeException: [source error] not available in a static method: h_第4张图片
修改为:
Dubbo consumer消费端启动报错java.lang.RuntimeException: [source error] not available in a static method: h_第5张图片

你可能感兴趣的:(dubbo)