-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Nacos服务注册ServiceName无法支持Identifier #612
Comments
另外, 我在本地已经实现了基于ConfigUniqueNameGenerator.getServiceName()+协议信息的代码实现, 如果可以确认的话, 我可以提交一个针对该问题的PR |
其他的服务注册客户端参考, 如registry-sofa实现方式参考:
|
感谢,你是对的,应该下面这样getUniqueName 带上uniqueId。如果这两天可以的话,基于5.5分支拉一个分支,提一个pr到 5.5 分支。 如果要晚一点,可以基于master拉分支,提pr到master。 |
好, 我尽快提交pr |
@jujusharp Nacos Registry 的设计与 Zookeeper 的类似,服务发布时以 |
@jujusharp 以下注释有描述我当时设计 Nacos Registry 的意图, |
@JervyShi NacosRegistryTest中服务注册和消费确实包含了identifier的示例, 但在测试用例中, 是用来测试消费端是否正确的区分不同的identifier的. 在我们的场景中. 并不是说注册实例影响消费. 而是导致注册的实例在服务中心只存在一份, 原来的不同identifer但ip端口相同的会被覆盖, 从而无法消费时找不到对应注册实例. 只要能注册到服务中心(通过修改端口或者ip的方式), 消费的逻辑确实能正常工作. |
这个问题对于Nacos注册中心那边也不好作为一个bug,因为对于实例meta来说, 所有的meta字段都是平等的注册服务基础配置而已, 没办法说meta中一个特殊字段还参与决定Instance是否是同一个. 如果需要, 那只能将Instance的所有meta都参与决定Instance是否唯一的因子. 但这样就有些奇怪了. |
@jujusharp 明白了,所以你的核心诉求是让 Nacos 的服务治理可以在 SOFA RPC 的场景下更完整的 Work,因此需要改造这个模型。 |
感谢回复. 是的, 因为我们现在的需求是根据系统负载能在业务负载的不同阶段决定是否需要将服务集成一个包部署还是拆成更多的独立服务部署(主要还是考虑不同阶段的资源和运维需求不同). 因此, 确实在某些场景需要将多个实现放到一个进程中(端口和ip相同)对外提供服务. 这时候可能更好的改造是在sofarpc这边会更适合些. |
Describe the bug
使用NacosRegistry进行服务注册时, 无法支持同一个接口多个实现通过Identifier区分的服务注册, Nacos永远用最后一个服务覆盖前面注册的实例.
Expected behavior
之前我认为这个是Nacos的问题, 在Nacos那边提了Issue, 希望服务注册除了InterfaceName还可以支持类似Group这种额外的参数. 但通过查看SOFARPC其它注册服务的代码发现. 在SOFARPC中, 其它的服务注册组件都是在生成ServiceName的时候将IdentifierName一起构造进去的, 调用的方法基本都是系统内置的方法: com.alipay.sofa.rpc.common.utils.StringUtils.ConfigUniqueNameGenerator.getUniqueName()和Protocol组合的方式. 而Nacos的获取方式是直接获取config.getInterfaceId()这种方式.
因此, 期望客户端注册ServiceName能类似其他服务注册客户端ServiceName由InterfaceId+Identifier+Protocol共同组成.
Actual behavior
NacosRegistry目前是直接获取InterfaceId, 代码:
Steps to reproduce
Minimal yet complete reproducer code (or GitHub URL to code)
Environment
The text was updated successfully, but these errors were encountered: