一、Dubbo直連模式
在Dubbo中,一個節點可以作為服務提供者、消費者或者註冊中心。默認情況下,Dubbo的消費者會向註冊中心訂閱服務提供者地址,在消費者發起調用時,Dubbo會通過註冊中心獲取服務提供者的地址並進行調用。而Dubbo直連模式則是一種在消費者端直接指定服務提供者地址的方式,繞過註冊中心直接與服務提供者通信。
使用Dubbo直連模式可以避免服務提供者註冊中心故障影響客戶端調用,同時也可以降低系統負擔。
二、Dubbo直連與ZooKeeper區別
Dubbo直連和ZooKeeper是兩種不同的Dubbo服務消費方式,Dubbo直連是在消費端直接指定服務提供方的ip地址,繞過註冊中心直接與服務提供方建立連接。而ZooKeeper則是通過Dubbo註冊中心來管理服務提供者的地址信息,並由調用方向ZooKeeper註冊中心請求服務提供者地址。
三、Dubbo直連方式
Dubbo直連有兩種方式:
- 使用點分隔符指定服務提供方的ip:port
- 使用registry協議指定服務提供方地址
reference:
id: demoService
url: dubbo://192.168.0.101:20880
interface: com.demo.interfaces.DemoService
以上代碼指定了DemoService服務的提供方ip地址為192.168.0.101和端口號為20880。在Dubbo直連模式下,消費端不再向註冊中心訂閱DemoService服務的提供方地址信息,此時只有192.168.0.101:20880可提供DemoService服務。
reference:
id: demoService
url: registry://192.168.0.101:2181/com.alibaba.dubbo.registry.RegistryService?registry=zookeeper
interface: com.demo.interfaces.DemoService
以上代碼使用registry協議指定了ZooKeeper的地址為192.168.0.101:2181,將註冊中心的地址作為參數傳給Dubbo調用,然後通過zookeeper協議指定DemoService服務的提供者地址。
四、Dubbo直連調用
Dubbo在消費者端使用直連方式調用服務提供者,與使用註冊中心的方式一樣,要先創建引用。
// 服務引用配置
ReferenceConfig reference = new ReferenceConfig();
reference.setInterface(xxxService.class);
reference.setUrl("dubbo://{host}:{port}");
// 創建引用實例
xxxService service = reference.get();
result = service.invokeMethod();
在代碼中,我們可以通過ReferenceConfig的setUrl方法指定服務提供者的URL地址,然後通過調用get方法來獲取服務實例,然後就可以使用服務的方法進行調用了。
五、Dubbo直連重試
在Dubbo直連模式下,如果服務提供者宕機,消費者會直接失敗。因此,Dubbo直連提供了重試機制,可以在服務調用失敗後進行重試。
使用Dubbo直連重試機制,需要在reference配置中添加retries字段:
reference.setRetries(3);
以上代碼指定了Dubbo直連調用失敗後重試3次。對於一些業務場景比較複雜的應用,直連機制下的重試機制可以減少請求失敗次數,提高應用的可用性。
六、Dubbo直連本地
Dubbo直連可以將服務提供者直接單獨部署在一個服務節點中,這樣可以極大地提高服務的響應速度。Dubbo還提供了本地直連模式,可以在同一台機器上的服務中使用Dubbo直連機制,可以避免Dubbo通過網絡延遲傳輸Dubbo協議,從而提高系統的性能表現。
使用Dubbo本地直連方式,需要在服務提供方的dubbo.properties中配置local.only=true,然後再服務消費方的ReferenceConfig中配置url=”dubbo://127.0.0.1:20880″,將服務提供者地址指定為本地IP地址即可。
七、Dubbo直連的URL
Dubbo直連允許使用不同的URL進行調用邏輯處理,可以在URL中添加一些參數和屬性。URL協議格式為:
dubbo://<host>:<port>/<path>?<param1>=<value1>&<param2>=<value2>&…
- host:服務提供者的IP地址或主機名
- port:服務提供者的端口號
- path:對應的實現類接口名
- param:一些可選參數
八、Dubbo直連version
在Dubbo中,每個服務的實現都有一個版本號。使用Dubbo直連方式調用服務,需要在消費端手動指定版本號。
// 指定服務版本號
reference.setVersion("1.0.0");
九、Dubbo直連和使用ZooKeeper的區別
使用Dubbo直連,可以直接指定服務提供者的地址,繞過註冊中心直接進行服務調用。而使用ZooKeeper註冊中心,Dubbo會通過ZooKeeper獲取服務提供方地址信息,在調用時使用負載均衡算法進行調用。
在使用Dubbo直連的情況下,需要保證服務提供者和消費者都處於同一網絡環境中。
以上是關於Dubbo直連的詳解,這裡是代碼示例:
代碼示例
- Dubbo直連方式
- Dubbo直連調用
- Dubbo直連重試
- Dubbo直連本地
- Dubbo直連的URL
- Dubbo直連version
reference:
id: demoService
url: dubbo://192.168.0.101:20880
interface: com.demo.interfaces.DemoService
// 服務引用配置
ReferenceConfig reference = new ReferenceConfig();
reference.setInterface(xxxService.class);
reference.setUrl("dubbo://{host}:{port}");
// 創建引用實例
xxxService service = reference.get();
result = service.invokeMethod();
reference.setRetries(3);
reference:
id: demoService
url: dubbo://127.0.0.1:20880
interface: com.demo.interfaces.DemoService
dubbo://192.168.0.101:20880/com.demo.interfaces.DemoService?version=1.0.0
reference.setVersion("1.0.0");
原創文章,作者:SOTJC,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/334906.html