前言
繼上一篇ZooKeeper的安裝和啓動,本篇將結合springboot+duboo+zookeeper來一次實戰演練,話不多說,繼續我們的實戰。
dubbo介紹
Dubbo(讀音[ˈdʌbəʊ])是阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫集成。(現在有當當網在維護)
Dubbo是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。
dubbo核心工作原理
名詞解釋:
節點 | 角色說明 |
---|---|
Provider | 暴露服務的服務提供方 |
Registry | 服務的註冊與發現的註冊中心,如zookeper(推薦)、multicast、redis、simple |
Consumer | 調用遠程服務的服務消費方 |
Monitor | 統計服務的調用次數和調用時間的監控中心 |
Container | 服務運行容器 |
調用流程
-
服務器負責啓動,加載,運行服務提供者。
-
服務提供者在啓動時,向註冊中心註冊自己所提供的服務
-
服務消費者在啓動時,向註冊中心訂閱自己所需的服務
-
註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於TCP長連接推送變更數據給消費者
-
服務消費者從提供的服務列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果失敗,則選擇另一臺調用
-
服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到檢測中心
由於本篇是實戰演練,dubbo的介紹就簡單到這裏。
springBoot-dubbo項目搭建
1.項目結構
項目結構如下圖所示:
1.dubbo-provider---服務提供者,springboot構建
2.dubbo-consumer---服務消費者,springboot構建
3.dubbo-api---服務提供者的接口API,maven構建
結合dubbo的工作原理理解:
- dubbo-provider先在容器裏初始化啓動
- dubbo-provider去註冊中心(zookeeper)去註冊服務
- dubbo-consumer去註冊中心訂閱自己所需的服務
- 註冊中心返回dubbo-provider的服務地址列表給消費者
- dubbo-consumer直接去調用dubbo-provider服務
- dubbo-consumer和dubbo-provider在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到檢測中心
2.項目依賴
dubbo-provider和dubbo-consumer都需要依賴下面的jar包
<!-- dubbo依賴 -->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- 引入zookeeper的依賴 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
3.服務提供者
服務提供者dubbo-provider提供TestService.testApi(String name)接口
package com.dubbo.provider.service;
import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.service.TestService;
import org.springframework.stereotype.Component;
//dubbo註解,暴露服務
@Service
@Component
public class TestServiceImpl implements TestService {
@Override
public String testApi(String name) {
return "I am test:" + name;
}
}
package com.dubbo.provider;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//開啓dubbo的自動配置
@EnableDubboConfiguration
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
application.properties文件配置:
#配置端口
server.port=8088
spring.dubbo.application.name=dubbo-provider
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181
4.服務消費者
dubbo-consumer遠程調用dubbo-provider提供的服務TestService.testApi(String name)接口
package com.dubbo.consumer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.service.TestService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Reference
private TestService testService;
@RequestMapping(value = "/test")
public String hello() {
String hello = testService.testApi("One");
return hello;
}
}
package com.dubbo.consumer;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//開啓dubbo的自動配置
@EnableDubboConfiguration
@SpringBootApplication
public class DubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
}
application.properties文件配置:
# 配置端口
server.port=8099
spring.dubbo.application.name=dubbo-consumer
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181
5.測試
A.先啓動本地的ZooKeeper(我本地已經安裝了zk,沒安裝的同學可以參照我上一篇文章安裝即可:https://mp.csdn.net/postedit/104081563)
B.再啓動服務提供者dubbo-provider,如下圖所示則表示服務已經向註冊中心(ZooKeeper)註冊成功了
C.啓動服務消費者dubbo-consumer,如下圖所示則表示服務已經向註冊中心(ZooKeeper)訂閱成功了
這裏可以看出和服務提供者是一樣的打印輸出。
D.結果展示
至此,整個集成過程的實戰演練就結束了,有沒有覺得很簡單呢,自己趕緊動手試試吧。