1. 程式人生 > 其它 >分散式理論 & RPC & Dubbo

分散式理論 & RPC & Dubbo

 

 

分散式服務框架(RPC)

用於提高機器利用率的資源排程和治理中心*(SOA)[ Service Oriented Architecture]

 

 

 

 

Dubbo(RPC框架)

 

 服務提供者**(Provider)**:暴露服務的服務提供方,服務提供者在啟動時,向註冊中心註冊自己提 供的服務。

服務消費者**(Consumer)**: 呼叫遠端服務的服務消費方,服務消費者在啟動時,向註冊中心訂閱自 己所需的服務,服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如 果呼叫失敗,再選另一臺呼叫。

註冊中心**(Registry)**:註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基 於長連線推送變更資料給消費者

監控中心**(Monitor)**:服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘發 送一次統計資料到監控中心

 

薦我們使用Zookeeper 註冊中心

Zookeeper官網:https://zookeeper.apache.org/

下載地址:https://archive.apache.org/dist/zookeeper/

修改zkServer.cmd 新增"-Dzookeeper.audit.enable=true"

 

 先開啟服務端,再開啟客戶端

 

簡單測試使用

s /:列出zookeeper根下儲存的所有節點
create –e /oop 123:建立一個oop節點,值為123
get 
/oop:獲取/kuangshen節點的值

 

安裝Dubbo

dubbo-admin-master-0.2.0\dubbo-admin\src\main\resources
#註冊中心的地址  注意埠號
dubbo.registry.address=zookeeper://127.0.0.1:2181

在專案目錄下打包dubbo-admin

mvn clean package -Dmaven.test.skip=true

若是沒有配置maven環境(用的IDEA的)

把dubbo-admin在idea中開啟(執行main方法)就行(記得提前開啟Zookeeper服務)

 

訪問

http://localhost:7001/  (賬號密碼都是root)

dubbo-admain: 是一個監控管理後臺 ,檢視我們註冊了哪些服務,哪些服務被消費

 

搭建一個簡單的環境

流程:

provider--->註冊中心--->consumer

建立好provider專案(做好服務)與consumer專案 

先開啟zkServer,然後開啟provider,再開啟dubbo-admin就可以在介面中檢視到相關的服務提供者,然後consumer去獲取需要的服務就行

 

 

2.讓provider連線註冊中心

匯入依賴

<dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
<!--        引入zookeeper-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>5.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>5.2.1</version>
        </dependency>
<!--      注意  zookeeper 日誌衝突-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.6.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
View Code

配置

server.port=8001
#服務應用名字
dubbo.application.name=provider-server
#註冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#哪些服務要被註冊
dubbo.scan.base-packages=com.ljm.service
View Code

加註解 2個

//服務註冊與發現

@Service   //注入bean
@DubboService  //註冊中心相關  ,專案啟動就自動註冊到註冊中心
public class TIcketServiceImpl implements TIcketService{
    @Override
    public String getTicket() {
        return "您的票號55678";
    }
}
View Code

啟動dubbo-admin( 訪問http://localhost:7001/)

 

3.consumer消費

匯入依賴(與provider相同)

建立一個與provider相同的介面

配置

server.port=8002
#去哪裡拿服務  需要暴露自己的名字
dubbo.application.name=consumer-server
#註冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
View Code

獲取服務

@Service
public class UserService1 {

    @DubboReference  //引用   也可以用pom座標,可以定義路徑相同的介面名
    TIcketService ICKET_SERVICE;  //與provider相同的介面

    public void buyTicker(){
        String ticket = ICKET_SERVICE.getTicket();
        System.out.println("拿到票:"+ticket);
    }
}


//測試
@SpringBootTest
class ConsumerServerApplicationTests {
    @Autowired
    UserService1 userService1;

    @Test
    void contextLoads() {
        userService1.buyTicker();
    }

}
View Code