apache/servicecomb-java-chassis

2.1版本 重启的时候有可能会导致 no schema defined

dfdfqwqw opened this issue · 8 comments

问题现象:
服务重启成功后,调RPC接口会有这个报错
image

初步分析:
异常时,MicroserviceMeta中对象如下
image
正常时,MicroserviceMeta对比
image

怀疑是RestEngineSchemaListener 没有正常接收CreateMicroserviceVersionEvent 事件完成处理,求问有没有避免措施,或者其他解决方案

问题的过程是怎么样的?重启的时候,这个服务调用其他服务失败还是其他服务调用它失败? 是一直失败还是只有一次失败,后续成功?
失败的情况,日志里面有没有异常?看看更新实例(日志搜索find instance)的过程中是不是有异常。

问题的过程是怎么样的?重启的时候,这个服务调用其他服务失败还是其他服务调用它失败? 是一直失败还是只有一次失败,后续成功? 失败的情况,日志里面有没有异常?看看更新实例(日志搜索find instance)的过程中是不是有异常。

服务重启后,进行接口调用,是本服务调用其他服务,一直失败后续不会恢复。

没有搜到很明显的异常

补充 日志现象 异常时不打印红框中服务契约的添加,但是看日志中有成功拉取到契约的日志
image

image
有个疑问 这个注册可以往前推吗

已定位 是因为 CreateMicroserviceVersionEvent 事件在RestEngineSchemaListener注册 之前触发 导致没有触发onCreateMicroserviceVersion方法
image

初步想法 是把 RestEngineSchemaListener 提前到onBeforeHandler 来注册 求分析 这样改动是否会引入其他问题

这个Listener使用通过spi加载的,在初始化SCBEngine的时候,应该就已经加载成功了,而这个时候按理来说,消费端的微服务状态还不为up,消费端是无法正常发起调用的,不应该存在服务端加载契约的说法

2.1的消费端好像没有这个判断,#2362 #2363 看看这两个修改,在2.1加上是不是就不会出现这个问题了?