通俗易懂的 Dubbo 教程(七):Dubbo 的高可用:zookeeper 宕機與 Dubbo 直連

zookeeper 宕機

原理

之前,我們一直使用 zookeeper 作爲 Dubbo 的註冊中心來使用,那麼如果 zookeeper 宕機,會有什麼後果呢?

其實,就算 zookeeper 宕機,我們依然可以消費 Dubbo 暴露的服務。爲什麼呢?其實這是因爲在註冊中心宕機之後,服務提供者和服務消費者仍能通過本地緩存通訊。

測試

我們在不運行 zookeeper 的情況下,運行服務提供者和服務消費者, 可以發現服務提供者和服務消費者一直報以下異常,且一直嘗試連接 zookeeper。
在這裏插入圖片描述
我們嘗試是否能調用服務提供者提供的服務,發現無法訪問,這是因爲這時候服務提供者和服務消費者還沒有進行過通信,沒有緩存。
在這裏插入圖片描述
我們將 zookeeper 打開,再次運行服務提供者和服務消費者,顯然這次可以正確運行。
在這裏插入圖片描述

接下來我們關閉 zookeeper ,不關閉服務提供者和服務消費者,可以發現它們會再次報錯,且會一直嘗試重連 zookeeper 。

zookeeper

調用服務提供者提供的服務,發現是可以訪問的,證明了即使 zookeeper 宕機,只要服務提供者和服務消費者之前進行過通信,它們仍能通過本地緩存進行通訊。

Dubbo 直連

什麼是 Dubbo 直連?

在開發以及測試中,我們經常需要不使用註冊中心,直接指定服務提供者,這時我們需要點對點直連的方式。

需要注意的是,該功能一般用於測試或開發時進行調試,不能在線上使用這個功能。

實現

實現 Dubbo 直連的功能非常簡單,只需要在 @Reference 標籤中指定一個 url 屬性即可,該 url 屬性代表直連的服務提供者的地址。

package edu.szu.consumer.serviceImpl;

import com.alibaba.dubbo.config.annotation.Reference;
import edu.szu.api.service.NameService;
import edu.szu.consumer.service.ChangeService;
import org.springframework.stereotype.Component;

@Component
public class ChangeServiceImpl implements ChangeService {

    //直連服務提供者
    @Reference(url = "dubbo://127.0.0.1:20880")
    NameService nameService;

    @Override
    public String change(String name) {
        return nameService.updateName(name);
    }
}

測試

我們關閉 zookeeper,運行服務提供者和服務消費者,發現可以正確返回,證明我們的 Dubbo 直連功能實現成功。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章