Thomas Chen

Results 15 comments of Thomas Chen

并没有,我是在我本机上的开发环境,就一个provider 一个consumer provider侧启动完毕的,再启动的consumer侧 出问题的不仅仅DictProvider的findAll方法 其他provider的其他方法(比如 RoleProvider的list方法),在启动后的一段时间内(体感30s),也会报错说 找不到UserProvider的list方法

这是另一个报错堆栈 可以看到 这次是AuthLogProvider.logSuccessfulLogin() 报错说找不到UserProvider的logSuccessfulLogin ``` 2022-10-10 10:53:04.580 ERROR 12392 --- [ async-1] c.l.rdc.core.dubbo.DubboExceptionFilter : [DUBBO] Got unchecked and undeclared exception which called by null. service: com.alibaba.rdc.basic.system.authlog.AuthLogProvider, method: logSuccessfulLogin, exception: org.apache.dubbo.rpc.RpcException:...

我的consumer侧还有一些警告 ``` 2022-10-10 10:52:21.571 WARN 12392 --- [ main] o.a.d.r.integration.RegistryDirectory : [DUBBO] Servicecom.alibaba.rdc.basic.system.rbac.roleuser.RoleUserMappingProvider received empty address list with no EMPTY protocol set, trigger empty protection., dubbo version: 3.0.12, current host:...

> arthas 上去 10.230.250.210 这台机器看下这个方法是否存在。 > > 对应的日志:serviceName='project-template-basic', host='10.230.250.210', 我不太理解,你想看哪个方法? 我的UserProvider(这是一个api定义接口)当然没有findAll()和logSuccessfulLogin() 因为findAll()在DictProvider,logSuccessfulLogin()在AuthLogProvider

补充: 我使用的是spring-cloud-starter-zookeeper-discovery + dubbo-spring-boot-starter ``` org.springframework.cloud spring-cloud-starter-zookeeper-discovery org.apache.dubbo dubbo-spring-boot-starter ``` springboot版本:2.7.4 springcloud版本:2021.0.4 spring-cloud-zookeeper版本:3.1.3 dubbo版本:3.0.12 dubbo配置文件用的zk ``` zookeeper: address: localhost:2181 spring: cloud: zookeeper: connect-string: ${zookeeper.address} dubbo: registry: address: "zookeeper://${zookeeper.address}" ```

> 如果对应的 Interface 一样是不允许的,从 Dubbo 的角度只能识别接口,接口内部无法再拆了。这种场景是需要拆分成多个 Interface 的 这三个provider类,都继承自一个基础的interface 像这样 ``` public interface UserProvider extends BaseCrudlProvider { } public interface DictProvider extends BaseCrudlProvider { List findAll(); } public interface BaseCrudlProvider...

为啥你们要关闭这个issue,明明问题还没有找到

我找到并规避了这个问题,但我觉得,它应该是可以被解决了 provider错乱的原因是,我自定义了一个comsumer的filter 这个filter主要任务是,将当前登录用户(登录由shiro管理)中的userid,传递给privider侧,用来记录类似操作日志、变更日志一类的东西 ``` @Activate(group = CommonConstants.CONSUMER) @Slf4j public class CustomContextFilter implements Filter { @Override public Result invoke(Invoker invoker, Invocation invocation) throws RpcException { setCurrentUserId(); setCurrentRemoteIp(); return invoker.invoke(invocation); } private...

然后,我规避这个问题的方法就是,在filter里,不要触发其他rpc调用

然后我说的,它应该可以被解决 是说,要么dubbo引擎应该类似递归算法一般,支持rpc的嵌套 比如像我的这个场景,在filter里发起另一个rpc 要么检测到有这个行为时,报特定的错误,加以制止 而不是真的将错乱的请求,发送到provider侧