Dubbo3 主機(jī)配置

2022-04-11 16:10 更新

自定義 Dubbo 服務(wù)對(duì)外暴露的主機(jī)地址

背景

在 Dubbo 中, Provider 啟動(dòng)時(shí)主要做兩個(gè)事情,一是啟動(dòng) server,二是向注冊(cè)中心注冊(cè)服務(wù)。啟動(dòng) server 時(shí)需要綁定 socket,向注冊(cè)中心注冊(cè)服務(wù)時(shí)也需要發(fā)送 socket 唯一標(biāo)識(shí)服務(wù)地址。

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

dubbo 中不設(shè)置 host 時(shí)默認(rèn) host 是什么

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

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

可以看到,只配置了端口號(hào),沒有配置 host,此時(shí)設(shè)置的 host 又是什么呢?

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

  1. 未聯(lián)網(wǎng)時(shí),返回 127.0.0.1
  2. 在阿里云服務(wù)器中,返回私有地址,如: 172.18.46.234
  3. 在本機(jī)測(cè)試時(shí),返回公有地址,如: 30.5.10.11

那在 dubbo 中如何指定服務(wù)的 socket?

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

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

在使用 docker 時(shí),有時(shí)需要設(shè)置端口映射,此時(shí),啟動(dòng) server 時(shí)綁定的 socket 和向注冊(cè)中心注冊(cè)的 socket 使用不同的端口號(hào),此時(shí)又該如何設(shè)置?

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

有些部署場(chǎng)景需要?jiǎng)討B(tài)指定服務(wù)注冊(cè)的地址,如 docker bridge 網(wǎng)絡(luò)模式下要指定注冊(cè)宿主機(jī) ip 以實(shí)現(xiàn)外網(wǎng)通信。dubbo 提供了兩對(duì)啟動(dòng)階段的系統(tǒng)屬性,用于設(shè)置對(duì)外通信的ip、port地址。

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

以上四個(gè)配置項(xiàng)均為可選項(xiàng),如不配置 dubbo 會(huì)自動(dòng)獲取 ip 與端口,請(qǐng)根據(jù)具體的部署場(chǎng)景靈活選擇配置。 dubbo 支持多協(xié)議,如果一個(gè)應(yīng)用同時(shí)暴露多個(gè)不同協(xié)議服務(wù),且需要為每個(gè)服務(wù)單獨(dú)指定 ip 或 port,請(qǐng)分別在以上屬性前加協(xié)議前綴。 如:

  • HESSIAN_DUBBO_PORT_TO_BIND hessian協(xié)議綁定的port
  • DUBBO_DUBBO_PORT_TO_BIND dubbo協(xié)議綁定的port
  • HESSIAN_DUBBO_IP_TO_REGISTRY hessian協(xié)議注冊(cè)的ip
  • DUBBO_DUBBO_PORT_TO_BIND dubbo協(xié)議注冊(cè)的ip

PORT_TO_REGISTRY 或 IP_TO_REGISTRY 不會(huì)用作默認(rèn) PORT_TO_BIND 或 IP_TO_BIND,但是反過(guò)來(lái)是成立的 如設(shè)置 PORT_TO_REGISTRY=20881 IP_TO_REGISTRY=30.5.97.6,則 PORT_TO_BIND IP_TO_BIND 不受影響 如果設(shè)置 PORT_TO_BIND=20881 IP_TO_BIND=30.5.97.6,則默認(rèn) PORT_TO_REGISTRY=20881 IP_TO_REGISTRY=30.5.97.6

總結(jié)

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

參考

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

Feedback


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)