-
Notifications
You must be signed in to change notification settings - Fork 13.2k
Closed
Labels
area/DocumentCategory issues or prs related to document.Category issues or prs related to document.contribution welcomekind/enhancementCategory issues or prs related to enhancement.Category issues or prs related to enhancement.
Milestone
Description
Describe the bug
注意到有几个issue 在提2.0.0版本的 nacos-client无法注册服务的问题,例如
#5299
#5339
总体表现为客户端没有异常,但是控制台上看不到注册的服务。
我自己在测试的时候也发现了这个问题。
Expected behavior
其实这个时候服务是没有注册成功的,客户端应该给出异常信息
How to Reproduce
描述一下背景吧
- 首先nacos 集群 jraft 选主失败,假设此时存在三台机器 A、B、C,机器B、C处于 server is DOWN now 的状态,无法工作,剩下机器A正常工作
- 使用nacos-client-2.0.0版本向机器A注册服务,显示成功,没有异常,但是机器A的控制台并不能看到该服务,使用openAPI查询也查不到,证明此时服务注册其实并没有成功
- 使用nacos-client-1.4.1版本或更早的版本向机器A注册服务,显示成功,此时机器A的控制台可以看到该服务
- 使用nacos-client-2.0.0版本向机器A注册持久服务而非临时服务,显示成功,此时机器A的控制台可以看到该服务
原因分析
由上述2、3、4三种情况的对比可知,使用grpc协议注册出了问题,http协议注册是正常的。
分析代码:
当grpc协议进行注册的时候:
可以看到只是publish 了事件就返回,所以客户端看不到异常。实际上事件的监听方在执行的时候,ClientRegisterServiceEvent 触发 ServiceChangedEvent,最后:
所以服务注册并没有成功。
修复建议
提交了一个简单的PR,将upgradeJudgement.isUseGrpcFeatures() 提前到注册之前就判断,可以临时解决一下
想知道nacos团队如何看待这个问题,有没有完善一点的解决方案
尤其是在做cp协议和ap协议分离的时候,因为这个问题我理解本质上是 jraft 选主失败导致的。
Metadata
Metadata
Assignees
Labels
area/DocumentCategory issues or prs related to document.Category issues or prs related to document.contribution welcomekind/enhancementCategory issues or prs related to enhancement.Category issues or prs related to enhancement.