Ray

Results 188 comments of Ray

近2、3个版本内没有计划,后续会考虑提供对应starter,也非常欢迎提供相关PR~

后续会对动态代理类的hashcode和equals等方法进行简单实现。 不过正常情况下应该不会出现对motan refer动态代理类的判等操作呀?是注入时没有指定代理类的name吗

一般一个服务节点调用连续失败10次,client会在本地将这个节点临时置为不可用状态。你可以在error日志查找关键字`NettyClient unavailable Error`看是不是触发了这种熔断策略。 如果是的话,在看看这条异常日志之前这个节点有什么异常信息,在做处理。 看是不是有连续请求超时的情况发生

motan请求是异步的,从client端只能知道没收到响应,无法判断是网络原因还是服务端执行超时。不过可以从server侧的耗时统计监控到。 client 请求时,使用failover的haStrategy时(默认),可以设置retries,retries=1表示重试1次,默认值为0不重试。重试时会选择新的节点。

目前consul注册中心不支持多地址。底层使用的ecwid ConsulClient不支持多ip地址。 一般consulclient都是和local的agent进行通信,建议使用agent方式

目前php版本只能使用motan2协议与其他语言版本通信,java端必须也使用motan2协议

可以看一下完整异常栈中最内层的caused by异常是什么。一般这种情况都是由IOException导致的,比如Broken pipe、Connection reset by peer之类的。 一般server端或者client端在还有读写操作时进行重启,就可能会出现这种io异常,避免的方式一般是server端在上下线(或者重启服务)时,可以参考[优雅停止服务](https://github.com/weibocom/motan/wiki/zh_userguide#优雅的停止服务)先关闭心跳开关,从注册中心下线服务节点后,在等待一小段时间(等当前请求都处理完毕后)在进行重启。

> @rayzhang0603 谢谢回复。 > > 我们是采用directUrl的方式,请教这个怎么做**优雅停止服务**? 使用directUrl方式无法优雅停止服务。directUrl一般用在调试场景,生产场景建议使用zk等注册中心,这样可以支持服务扩缩容等动态调整能力。

看异常栈,使用场景是client侧在线程池中调用rpc,反序列化时需要当前线程的类加载器可以加载到要反序列化的类。 rpc自身的机制不会影响类加载,要解决这个问题,还是确定线程池中的线程加载不到对应类的原因,可以确认一下有没有使用javaagent或者使用了定制的类加载器之类的,可以调试一下类加载的过程看看为什么加载不到这个类。 如果还是无法确定类加载失败的原因,可以考虑在首次请求前使用ReflectUtil.forName 预先加载一下rpc涉及的类试试,ReflectUtil有类缓存,只要加载成功一次就可以持续使用了。