Dubbo直連詳解

一、Dubbo直連模式

在Dubbo中,一個節點可以作為服務提供者、消費者或者註冊中心。默認情況下,Dubbo的消費者會向註冊中心訂閱服務提供者地址,在消費者發起調用時,Dubbo會通過註冊中心獲取服務提供者的地址並進行調用。而Dubbo直連模式則是一種在消費者端直接指定服務提供者地址的方式,繞過註冊中心直接與服務提供者通信。

使用Dubbo直連模式可以避免服務提供者註冊中心故障影響客戶端調用,同時也可以降低系統負擔。

二、Dubbo直連與ZooKeeper區別

Dubbo直連和ZooKeeper是兩種不同的Dubbo服務消費方式,Dubbo直連是在消費端直接指定服務提供方的ip地址,繞過註冊中心直接與服務提供方建立連接。而ZooKeeper則是通過Dubbo註冊中心來管理服務提供者的地址信息,並由調用方向ZooKeeper註冊中心請求服務提供者地址。

三、Dubbo直連方式

Dubbo直連有兩種方式:

  1. 使用點分隔符指定服務提供方的ip:port
  2.    
       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服務。

  3. 使用registry協議指定服務提供方地址
  4.    
       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直連的詳解,這裡是代碼示例:

代碼示例

  1. Dubbo直連方式
  2.    
        reference:
          id: demoService
          url: dubbo://192.168.0.101:20880
          interface: com.demo.interfaces.DemoService
       
       
  3. Dubbo直連調用
  4.    
        // 服務引用配置
        ReferenceConfig reference = new ReferenceConfig();
        reference.setInterface(xxxService.class);
        reference.setUrl("dubbo://{host}:{port}");
        // 創建引用實例
        xxxService service = reference.get();
        result = service.invokeMethod();
       
       
  5. Dubbo直連重試
  6.    
        reference.setRetries(3);
       
       
  7. Dubbo直連本地
  8.    
       reference:
          id: demoService
          url: dubbo://127.0.0.1:20880
          interface: com.demo.interfaces.DemoService
       
       
  9. Dubbo直連的URL
  10.    
        dubbo://192.168.0.101:20880/com.demo.interfaces.DemoService?version=1.0.0
       
       
  11. Dubbo直連version
  12.    
        reference.setVersion("1.0.0");
       
       

原創文章,作者:SOTJC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/334906.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
SOTJC的頭像SOTJC
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相關推薦

  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性傳感器,能夠同時測量加速度和角速度。它由三個傳感器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變量讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論