任务

跑通sofa插件,研究sofa协议实现原理

sofa + nacos

启动 admin 后,更改 sofa 插件的配置和状态。

image.png

启动网关。然后更改 sofa 的注册中心信息,启动 sofa 的例子。

1
2
3
4
5
com:
alipay:
sofa:
rpc:
registry-address: nacos://127.0.0.1:8848

发起请求:/sofa/findById,报空指针异常:

1
2
java.lang.NullPointerException: null
at org.dromara.soul.plugin.sofa.proxy.SofaProxyService.genericInvoker(SofaProxyService.java:81)

追溯空指针的原因,可以看到原因大概是,SofaProxyService中没有成功注入sofaParamResolveService的bean,而注入操作是在SofaPluginConfiguration的配置中完成的。

1
2
3
4
5
6
7
8
9
public class SofaProxyService {

private final SofaParamResolveService sofaParamResolveService;

public SofaProxyService(final SofaParamResolveService sofaParamResolveService) {
this.sofaParamResolveService = sofaParamResolveService;
}
...
}
1
2
3
4
5
6
7
8
9
@Configuration
@ConditionalOnClass(SofaPlugin.class)
public class SofaPluginConfiguration {
@Bean
public SoulPlugin sofaPlugin(final ObjectProvider<SofaParamResolveService> sofaParamResolveService) {
return new SofaPlugin(new SofaProxyService(sofaParamResolveService.getIfAvailable()));
}
...
}

研究了好一会,没发现原因,明天继续…