dubbo2.7 62 主机配置
dubbo2.7 62 主机配置
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。https://store.amazingmemo.com/chapterDetail/1685324709017001`
自定义 Dubbo 服务对外暴露的主机地址
背景
在 Dubbo 中,Provider 启动时主要做两个事情,一是启动 server,二是向注册中心注册服务。启动 server 时需要绑定 socket,向注册中心注册服务时也需要发送 socket 唯一标识服务地址。
dubbo
中不设置host
时默认host
是什么?- 那在
dubbo
中如何指定服务的host
, 我们是否可以用 hostname 或 domain 代替 IP 地址作为host
? - 在使用 docker 时, 有时需要设置端口映射, 此时, 启动 server 时绑定的 socket 和向注册中心注册的 socket 使用不同的端口号, 此时又该如何设置?
示例
Dubbo 中不设置 Host 时默认 Host 是什么
一般的 dubbo 协议配置如下:
1 | ... |
可以看到, 只配置了端口号, 没有配置 host,此时设置的 host 又是什么呢?
查看代码发现, 在 org.apache.dubbo.config.ServiceConfig#findConfigedHosts()
中, 通过 InetAddress.getLocalHost().getHostAddress()
获取默认 host。其返回值如下:
- 未联网时,返回 127.0.0.1
- 在阿里云服务器中,返回私有地址, 如: 172.18.46.234
- 在本机测试时,返回公有地址,如: 30.5.10.11
那在 Dubbo 中如何指定服务的 Socket?
除此之外, 可以通过 dubbo.protocol
或 dubbo.provider
的 host
属性对 host
进行配置, 支持 IP 地址和域名, 如下:
1 | ... |
在使用 Docker 时,有时需要设置端口映射,此时,启动 Server 时绑定的 Socket 和向注册中心注册的 Socket 使用不同的端口号,此时又该如何设置?
有些部署场景需要动态指定服务注册的地址,如 docker bridge 网络模式下要指定注册宿主机 ip 以实现外网通信。dubbo 提供了两对启动阶段的系统属性,用于设置对外通信的 ip、port 地址。
- DUBBO_IP_TO_REGISTRY:注册到注册中心的 ip 地址
- DUBBO_PORT_TO_REGISTRY:注册到注册中心的 port 端口
- DUBBO_IP_TO_BIND:监听 ip 地址
- DUBBO_PORT_TO_BIND:监听 port 端口
以上四个配置项均为可选项,如不配置 dubbo 会自动获取 ip 与端口,请根据具体的部署场景灵活选择配置。dubbo 支持多协议,如果一个应用同时暴露多个不同协议服务,且需要为每个服务单独指定 ip 或 port,请分别在以上属性前加协议前缀。如:
- HESSIAN_DUBBO_PORT_TO_BIND:hessian 协议绑定的 port
- DUBBO_DUBBO_PORT_TO_BIND:dubbo 协议绑定的 port
- HESSIAN_DUBBO_IP_TO_REGISTRY:hessian 协议注册的 ip
- DUBBO_DUBBO_IP_TO_REGISTRY:dubbo 协议注册的 ip
PORT_TO_REGISTRY 或 IP_TO_REGISTRY 不会用作默认 PORT_TO_BIND 或 IP_TO_BIND,但是反过来是成立的。如:
- 设置
PORT_TO_REGISTRY=20881
和IP_TO_REGISTRY=30.5.97.6
,则PORT_TO_BIND
和IP_TO_BIND
不受影响 - 设置
PORT_TO_BIND=20881
和IP_TO_BIND=30.5.97.6
,则默认PORT_TO_REGISTRY=20881
且IP_TO_REGISTRY=30.5.97.6
总结
- 可以通过
dubbo.protocol
或dubbo.provider
的host
属性对host
进行配置, 支持 IP 地址和域名. 但此时注册到注册中心的 IP 地址和监听 IP 地址是同一个值 - 为了解决在虚拟环境或局域网内 consumer 无法与 provider 通信的问题, 可以通过环境变量分别设置注册到注册中心的 IP 地址和监听 IP 地址, 其优先级高于
dubbo.protocol
或dubbo.provider
的host
配置