You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过公网IP将Dubbo实例注册到Nacos注册中心(含本地调试场景诉求)

如何通过公网IP将Dubbo实例注册到Nacos注册中心(含本地调试场景诉求)

刚好之前帮团队解决过类似的本地调试痛点——不用启动全量微服务,直接对接测试环境的Nacos实例,给你梳理几个亲测有效的方案👇

核心场景先对齐

先明确下你的场景:Nacos注册中心部署在测试环境,提供公网可访问的IP+端口;你需要:

  1. 本地开发的Dubbo服务能以公网可访问的地址注册到该Nacos
  2. 本地Dubbo客户端能从Nacos拉取测试环境的服务实例并调用,省去本地启动所有微服务的麻烦

方案一:直接配置公网IP注册(适合本地有固定公网IP的情况)

这是最直接的方式,只要本地有固定公网IP(比如办公网分配的固定公网地址),几步就能搞定:

1. 配置Dubbo连接公网Nacos

在Spring Boot项目的application.yml(或application.properties)里指定Nacos的公网地址,记得填权限信息(如果测试环境Nacos开了校验):

dubbo:
  registry:
    address: nacos://<NACOS公网IP>:<NACOS端口> # 示例:nacos://106.xxx.xxx.xxx:8848
    username: <Nacos登录用户名>
    password: <Nacos登录密码>

2. 强制指定本地服务的对外暴露IP

本地机器默认会用内网IP注册到Nacos,测试环境的服务根本访问不到,所以必须手动指定你的公网IP:

dubbo:
  protocol:
    name: dubbo
    port: 20880 # 本地Dubbo服务的端口
    host: <你的本地公网IP> # 示例:123.xxx.xxx.xxx

3. 放行端口防火墙

别忘在本地防火墙和办公网的安全组里,放行你配置的Dubbo端口(比如20880),否则测试环境的服务调用本地会被拦截。


方案二:FRP端口转发(适合本地无固定公网IP的情况)

如果你的本地是动态公网IP(比如家庭宽带),或者不想开放本地防火墙,用FRP做端口转发是最优解——把本地Dubbo端口映射到云服务器的公网端口,注册到Nacos的是云服务器的公网地址:

1. 云服务器部署FRP服务端

找一台有固定公网IP的云服务器,下载FRP后,创建frps.ini配置:

[common]
bind_port = 7000 # FRP服务端监听的端口,需要在云服务器安全组放行

启动服务端:

./frps -c ./frps.ini

2. 本地配置FRP客户端

本地同样下载FRP,创建frpc.ini配置,把本地Dubbo端口映射到云服务器的端口:

[common]
server_addr = <云服务器公网IP>
server_port = 7000 # 和服务端的bind_port一致

[dubbo-local]
type = tcp
local_ip = 127.0.0.1
local_port = 20880 # 本地Dubbo服务的端口
remote_port = 20881 # 云服务器上要映射的端口,需在安全组放行

启动客户端:

./frpc -c ./frpc.ini

3. 配置本地Dubbo注册信息

现在注册到Nacos的地址是云服务器的公网IP+映射端口:

dubbo:
  registry:
    address: nacos://<NACOS公网IP>:<NACOS端口>
    username: <Nacos用户名>
    password: <Nacos密码>
  protocol:
    name: dubbo
    host: <云服务器公网IP>
    port: 20881 # 对应FRP配置的remote_port

方案三:仅本地客户端调用测试服务(无需注册本地服务)

如果你的需求只是本地客户端调用测试环境的服务,不需要把本地服务注册到Nacos,那更简单:

1. 全局配置对接公网Nacos

直接让客户端从公网Nacos拉取服务实例:

dubbo:
  registry:
    address: nacos://<NACOS公网IP>:<NACOS端口>
    username: <Nacos用户名>
    password: <Nacos密码>
    parameters:
      namespace: <测试环境Nacos的命名空间ID> # 如果用了命名空间必须加

2. 临时直连单个服务(调试专用)

如果只是临时调试某个服务,不想改全局配置,直接在@Reference注解里指定测试服务的公网地址:

@Reference(url = "dubbo://<测试服务公网IP>:20880/com.xxx.TestService")
private TestService testService;

必看注意事项

  • 网络连通性校验:先在本地执行telnet <NACOS公网IP> <端口>ping <NACOS公网IP>,确保网络能通,不通的话先排查测试环境的Nacos安全组是否放行公网访问。
  • Nacos命名空间:如果测试环境Nacos用了命名空间,一定要在Dubbo配置里指定namespace参数,否则拉不到服务实例。
  • 动态IP适配:如果本地是动态公网IP,建议用DDNS工具把IP绑定到一个固定域名,配置Dubbo时用域名代替IP,避免每次IP变化都改配置。

如果你的场景还有特殊情况(比如用Dubbo 2.6.x老版本、Nacos集群部署),随时补充细节,我再给你调整方案~

火山引擎 最新活动