zookeeper 宕機
原理
之前,我們一直使用 zookeeper 作爲 Dubbo 的註冊中心來使用,那麼如果 zookeeper 宕機,會有什麼後果呢?
其實,就算 zookeeper 宕機,我們依然可以消費 Dubbo 暴露的服務。爲什麼呢?其實這是因爲在註冊中心宕機之後,服務提供者和服務消費者仍能通過本地緩存通訊。
測試
我們在不運行 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 直連功能實現成功。