簡介
Dubbo是阿里巴巴公司開源的一個高性能優(yōu)秀的服務(wù)治理框架距境,使得應(yīng)用可通過高性能的RPC實現(xiàn)服務(wù)的輸出和輸入功能奈嘿,可以和Spring框架無縫集成。
節(jié)點角色說明:
- Provider: 暴露服務(wù)的服務(wù)提供方
- Consumer: 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費方
- Registry: 服務(wù)注冊與發(fā)現(xiàn)的注冊中心
- Monitor: 統(tǒng)計服務(wù)的調(diào)用次調(diào)和調(diào)用時間的監(jiān)控中心
- Container: 服務(wù)運行容器
調(diào)用關(guān)系說明:
- 服務(wù)容器負(fù)責(zé)啟動昼激,加載障本,運行服務(wù)提供者
- 服務(wù)提供者在啟動時,向注冊中心注冊自己提供的服務(wù)
- 服務(wù)消費者在啟動時懊亡,向注冊中心訂閱自己所需的服務(wù)
- 注冊中心返回服務(wù)提供者地址列表給消費者依啰,如果有變更,注冊中心將基于長連接推送變更數(shù)據(jù)給消費者
- 服務(wù)消費者店枣,從提供者地址列表中速警,基于軟負(fù)載均衡算法,選一臺提供者進(jìn)行調(diào)用鸯两,如果調(diào)用失敗坏瞄,再選另一臺調(diào)用
- 服務(wù)消費者和提供者,在內(nèi)存中累計調(diào)用次數(shù)和調(diào)用時間甩卓,定時每分鐘發(fā)送一次統(tǒng)計數(shù)據(jù)到監(jiān)控中心
搭建一個Demo
Dubbo的搭建也非常簡單,官方也提供了SpringBoot的starter蕉斜,可以使用SpringBoot進(jìn)行開發(fā)逾柿。Dubbo可以使用很多種類的注冊中心缀棍,比如Zookeeper、Redis等其他机错,這里我們使用Zookeeper作為注冊中心爬范,不了解Zookeeper的可以自行學(xué)習(xí)下。
這里不對Zookeeper和SpringBoot的配置做說明弱匪,只針對Dubbo青瀑。
首先我們使用IDEA創(chuàng)建個Maven多模塊工程,結(jié)構(gòu)如下:
- api項目定義了所有遠(yuǎn)程調(diào)用的接口
- provider是服務(wù)的提供者
- consumer是服務(wù)的消費者
搭建api
在api項目里定義一個接口
搭建provider
接下來配置服務(wù)提供者provider萧诫,provider是一個springboot項目斥难。首先當(dāng)然是引入dubbo的依賴,官方提供了starter帘饶。
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
application.yml的配置如下
server:
port: 8082
dubbo:
registry:
protocol: zookeeper
address: 192.168.1.189:2181,192.168.1.189:2182,192.168.1.189:2183
protocol:
port: 20880
name: dubbo
application:
name: provider
這里配置了zookeeper注冊中心的地址哑诊,使用的RPC協(xié)議和端口號,使用的協(xié)議是dubbo及刻,當(dāng)然dubbo也支持很多其他協(xié)議镀裤,比如 rmi、hessian缴饭、http等等暑劝。
在provider里面寫一個實現(xiàn)api中userService結(jié)構(gòu)的實現(xiàn)類
@Service
@Component
public class UserServiceImpl implements UserService {
@Override
public String hello(String name) {
return "Hello," + name;
}
}
注意這里的 @Service 注解是Dubbo的颗搂,不是Spring的担猛。
然后在啟動類上加上@EnableDubbo注解
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
到此provider就配置完成了
搭建consumer
接下來配置consumer,consumer也是一個springboot項目峭火,跟配置provider一樣引入dubbo-starter的maven依賴毁习。
application.yml配置
server:
port: 8081
dubbo:
application:
name: consumer
protocol:
port: 20881
name: dubbo
registry:
protocol: zookeeper
address: 192.168.1.189:2181,192.168.1.189:2182,192.168.1.189:2183
配置類似provider
寫一個controller,調(diào)用provider
注意這里使用 @Reference注解注入userService卖丸,啟動類上加上@EnableDubbo注解纺且。
分別啟動provider和consumer,使用Postman進(jìn)行測試稍浆。
DubboAdmin
DubboAdmin在阿里貢獻(xiàn)給Apache之后進(jìn)行了重新開發(fā)载碌,有些功能還沒有完全遷移過來。所以我們這里暫時還是使用老版本的DubboAdmin
我們到Github上下載dubbo的源碼
這里我已經(jīng)下載好了dubbo-admin的項目衅枫,
我們修改上圖所示目錄中的dubbo.preperties配置文件嫁艇,這里主要修改下zookeeper的地址
dubbo.registry.address=zookeeper://192.168.1.189:2181 dubbo.admin.root.password=root dubbo.admin.guest.password=guest
然后使用maven對dubbo-admin項目進(jìn)行編譯打包,得到dubbo-admin-2.6.0.war包弦撩,把該war放到tomcat下進(jìn)行部署步咪。
啟動后輸入賬戶密碼
詳細(xì)的使用說明可以參考官網(wǎng)文檔