今天迁移Dubbo的代码,突然有个Service死活都找不到。
调用端报错:
No provider available for the service org.ccframe.subsys.core.service.ITenantSearchService from registry 127.0.0.1:2181 on the consumer 192.168.1.88 using the dubbo version 3.1.11. Please check if the providers have been started and registered.
服务端报错:
Service org.ccframe.subsys.core.service.ITenantSearchService with version 0.0.0 not found, invocation rejected.
发现很奇怪,其它服务好好的,唯独这个服务不行。只能一段一段代码排查,最后发现问题居然是implements Interface的顺序导致了无法注册provider
由于需要在service里初始化一个jetcache,顺手引入了个implements InitializingBean。在Bean初始化时同时初始缓存,结果由于InitializingBean写在implements第一位的,于是乎provider就挂了。
事故现场快照:
明显,需要的provider注册到InitializingBean接口下了。
事故类这样申明的:
@DubboService
public class TenantSearchService extends BaseSearchService<Tenant, TenantSearchRepository> implements InitializingBean,ITenantSearchService {
经过排查后修改如下:
@DubboService
public class TenantSearchService extends BaseSearchService<Tenant, TenantSearchRepository> implements ITenantSearchService,InitializingBean {
然后重新启动后,provider顺利注册上去了:
在此记录一笔,implements的书写顺序也能导致代码翻车,够狠