Dubbo3 主機配置

2022-04-11 16:10 更新

自定義 Dubbo 服務對外暴露的主機地址

背景

在 Dubbo 中, Provider 啟動時主要做兩個事情,一是啟動 server,二是向注冊中心注冊服務。啟動 server 時需要綁定 socket,向注冊中心注冊服務時也需要發(fā)送 socket 唯一標識服務地址。

  1. dubbo中不設置host時默認host是什么?
  2. 那在dubbo中如何指定服務的host,我們是否可以用hostname或domain代替IP地址作為host?
  3. 在使用docker時,有時需要設置端口映射,此時,啟動server時綁定的socket和向注冊中心注冊的socket使用不同的端口號,此時又該如何設置?

dubbo 中不設置 host 時默認 host 是什么

一般的 dubbo 協(xié)議配置如下:

    ...
    <dubbo:protocol name="dubbo" port="20890" />
    ...

可以看到,只配置了端口號,沒有配置 host,此時設置的 host 又是什么呢?

查看代碼發(fā)現(xiàn),在 org.apache.dubbo.config.ServiceConfig#findConfigedHosts() 中,通過 InetAddress.getLocalHost().getHostAddress() 獲取默認 host。其返回值如下:

  1. 未聯(lián)網時,返回 127.0.0.1
  2. 在阿里云服務器中,返回私有地址,如: 172.18.46.234
  3. 在本機測試時,返回公有地址,如: 30.5.10.11

那在 dubbo 中如何指定服務的 socket?

除此之外,可以通過 dubbo.protocol 或 dubbo.provider 的 host 屬性對 host 進行配置,支持IP地址和域名,如下:

    ...
    <dubbo:protocol name="dubbo" port="20890" host="www.example.com"/>
    ...

在使用 docker 時,有時需要設置端口映射,此時,啟動 server 時綁定的 socket 和向注冊中心注冊的 socket 使用不同的端口號,此時又該如何設置?

見 dubbo 通過環(huán)境變量設置 host

有些部署場景需要動態(tài)指定服務注冊的地址,如 docker bridge 網絡模式下要指定注冊宿主機 ip 以實現(xiàn)外網通信。dubbo 提供了兩對啟動階段的系統(tǒng)屬性,用于設置對外通信的ip、port地址。

  • DUBBO_IP_TO_REGISTRY — 注冊到注冊中心的ip地址
  • DUBBO_PORT_TO_REGISTRY — 注冊到注冊中心的port端口
  • DUBBO_IP_TO_BIND — 監(jiān)聽ip地址
  • DUBBO_PORT_TO_BIND — 監(jiān)聽port端口

以上四個配置項均為可選項,如不配置 dubbo 會自動獲取 ip 與端口,請根據具體的部署場景靈活選擇配置。 dubbo 支持多協(xié)議,如果一個應用同時暴露多個不同協(xié)議服務,且需要為每個服務單獨指定 ip 或 port,請分別在以上屬性前加協(xié)議前綴。 如:

  • HESSIAN_DUBBO_PORT_TO_BIND hessian協(xié)議綁定的port
  • DUBBO_DUBBO_PORT_TO_BIND dubbo協(xié)議綁定的port
  • HESSIAN_DUBBO_IP_TO_REGISTRY hessian協(xié)議注冊的ip
  • DUBBO_DUBBO_PORT_TO_BIND dubbo協(xié)議注冊的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

總結

  1. 可以通過dubbo.protocol或dubbo.provider的host屬性對host進行配置,支持IP地址和域名.但此時注冊到注冊中心的IP地址和監(jiān)聽IP地址是同一個值
  2. 為了解決在虛擬環(huán)境或局域網內consumer無法與provider通信的問題,可以通過環(huán)境變量分別設置注冊到注冊中心的IP地址和監(jiān)聽IP地址,其優(yōu)先級高于dubbo.protocol或dubbo.provider的host配置

參考

  1. Proposal: support hostname or domain in service discovery.
  2. dubbo通過環(huán)境變量設置host

Feedback


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號