Skip to content
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

registerInstance 注册覆盖前面的实例,不能注册多实例 #5863

Closed
tonyfud opened this issue May 26, 2021 · 14 comments
Closed

registerInstance 注册覆盖前面的实例,不能注册多实例 #5863

tonyfud opened this issue May 26, 2021 · 14 comments

Comments

@tonyfud
Copy link

tonyfud commented May 26, 2021

NamingService.registerInstance

使用的 nacos-client. 2.0.1
nacos server. 阿里云的 微服务治理, nacos 2.0 版本。

用 clinet 的这个方法进行 注册服务, 会覆盖前面的服务,多个服务端口不一样的情况下。

是我使用不正确吗 ? 还是有问题存在?

2 个实例, ip 不一样。 103, 先注册成功到 nacos , 后面到 23 注册时, 103 会被覆盖掉。 在nacos 列表里找不到了。
serviceName=MARKETING.CENTER-INNER-SERVICE, Ip=192.168.0.103, port=8080
serviceName=MARKETING.CENTER-INNER-SERVICE, Ip=192.168.0.23, port=8080

NamingService.registerInstance(instance.getAppName(), "DEFAULT_GROUP", instance.getIPAddr(), instance.getPort());

@KomachiSion
Copy link
Collaborator

同一个客户端注册同一个服务的不同实例?

这是什么需求? 同一个客户端注册同一个服务的实例,理论上就是应该覆盖吧。

@tonyfud
Copy link
Author

tonyfud commented May 27, 2021

nacos-group/nacos-sync#235

我使用这个 nacos-sync 的时候 没法吧 相同服务名,多实例同步到 nacos 2.0 . 然后我去看了下他的 同步代码 发现是用 NamingService.registerInstance 这个方法来注册服务到 nacos 上, 所以就来这么请教一下了。

image

@KomachiSion
Copy link
Collaborator

那就是需要一个batch注册的接口,正常的注册覆盖应该才是正确的。

@brotherlu-xcq
Copy link
Collaborator

批量注册的话,我们现在的数据模型会有影响吗?因为我们现在clientId和service还有instance是一一对应的。如果需要支持这个功能的话,好像和数据模型有些冲突。

@KomachiSion
Copy link
Collaborator

batch的时候需要将多个Instance合并成一个Instance,并且在生成数据的时候需要进行一定的解析。

@zrlw
Copy link
Contributor

zrlw commented Aug 13, 2021

可否将InstanceRequestHandler的registerInstance和deregisterInstance方法里调用clientOperationService注册或解注册方法时传入的clientId从
meta.getConnectionId()改为IpPortBasedClient.getClientId(request.getInstance().toInetAddr(), request.getInstance().isEphemeral()) ?这样就和1.x的clientId保持一致了。

@zrlw
Copy link
Contributor

zrlw commented Aug 13, 2021

如果觉得目前的鉴权机制不够用,可以考虑增加代理注册地址白名单配置,把nacos sync地址加进来,对于来自代理注册地址白名单的请求,按1.x的clientId规则取clientId。

@wangwei-ying
Copy link

batch的时候需要将多个Instance合并成一个Instance,并且在生成数据的时候需要进行一定的解析。

有没有人做这个batch的功能,我这边打算加下这个功能,确实是需要多集群同步,nacos线上挂了两次,

@wangwei-ying
Copy link

可否将InstanceRequestHandler的registerInstance和deregisterInstance方法里调用clientOperationService注册或解注册方法时传入的clientId从 meta.getConnectionId()改为IpPortBasedClient.getClientId(request.getInstance().toInetAddr(), request.getInstance().isEphemeral()) ?这样就和1.x的clientId保持一致了。

老哥有解决这个双中心的问题吗

@zz630
Copy link
Contributor

zz630 commented Jan 7, 2022

batch的时候需要将多个Instance合并成一个Instance,并且在生成数据的时候需要进行一定的解析。

有没有人做这个batch的功能,我这边打算加下这个功能,确实是需要多集群同步,nacos线上挂了两次,

试了下sync用多个NacosNamingService去注册,不到1k实例不一会就报错OutOfMemoryError: unable to create new native thread。
感觉就算用了2.xclient的sync可以注册多个同service的实例到nacos也不靠谱,sync一挂,同步过去的实例又全部没了。多sync重复执行相同同步任务的话不知道可不可以,但nacos的连接量就上去。觉得sync注册实例实例会好一些

@jefferson-chern
Copy link

可否将InstanceRequestHandler的registerInstance和deregisterInstance方法里调用clientOperationService注册或解注册方法时传入的clientId从 meta.getConnectionId()改为IpPortBasedClient.getClientId(request.getInstance().toInetAddr(), request.getInstance().isEphemeral()) ?这样就和1.x的clientId保持一致了。

老哥有解决这个双中心的问题吗

请教一下,你们现在用的是nacos2.x吗?这个多中心同步的问题现在怎么解决的?

@jefferson-chern
Copy link

batch的时候需要将多个Instance合并成一个Instance,并且在生成数据的时候需要进行一定的解析。

有没有人做这个batch的功能,我这边打算加下这个功能,确实是需要多集群同步,nacos线上挂了两次,

试了下sync用多个NacosNamingService去注册,不到1k实例不一会就报错OutOfMemoryError: unable to create new native thread。 感觉就算用了2.xclient的sync可以注册多个同service的实例到nacos也不靠谱,sync一挂,同步过去的实例又全部没了。多sync重复执行相同同步任务的话不知道可不可以,但nacos的连接量就上去。觉得sync注册实例实例会好一些

感觉更多的应该是去修改nacos的代码,让nacos支持nacos-sync,增加批量注册,然后nacos-sync去调用这个批量注册的接口。

@zrlw
Copy link
Contributor

zrlw commented Jun 5, 2022

可否将InstanceRequestHandler的registerInstance和deregisterInstance方法里调用clientOperationService注册或解注册方法时传入的clientId从 meta.getConnectionId()改为IpPortBasedClient.getClientId(request.getInstance().toInetAddr(), request.getInstance().isEphemeral()) ?这样就和1.x的clientId保持一致了。

老哥有解决这个双中心的问题吗

我们目前用的自己修改的1.4.2版本以便做sync同步双中心,后续打算换其他注册中心软件了。

@zrlw
Copy link
Contributor

zrlw commented Oct 27, 2023

我在nacos-sync提了一个nacos2集群之间批量同步临时实例的PR:nacos-group/nacos-sync#335
临时实例同步已测试通过,持久化实例没有可测试的环境。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants