僅用5分鐘極速入門Dubbo使用教程
Dubbo是什么?
Dubbo是一個分布式服務(wù)框架,致力于提供高性能和透明化的RPC遠程服務(wù)調(diào)用方案,以及SOA服務(wù)治理方案。簡單的說,dubbo就是個服務(wù)框架,如果沒有分布式的需求,其實是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務(wù)框架的需求,并且本質(zhì)上是個服務(wù)調(diào)用的東東,說白了Dubbo就是個遠程服務(wù)調(diào)用的分布式框架(告別Web Service模式中的WSdl,以服務(wù)者與消費者的方式在dubbo上注冊)
其核心部分包含:
1. 遠程通訊: 提供對多種基于長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應(yīng)”模式的信息交換方式。
2. 集群容錯: 提供基于接口方法的透明遠程過程調(diào)用,包括多協(xié)議支持,以及軟負載均衡,失敗容錯,地址路由,動態(tài)配置等集群支持。
3. 自動發(fā)現(xiàn): 基于注冊中心目錄服務(wù),使服務(wù)消費方能動態(tài)的查找服務(wù)提供方,使地址透明,使服務(wù)提供方可以平滑增加或減少機器。
Dubbo能做什么?
1.透明化的遠程方法調(diào)用,就像調(diào)用本地方法一樣調(diào)用遠程方法,只需簡單配置,沒有任何API侵入。
2.軟負載均衡及容錯機制,可在內(nèi)網(wǎng)替代F5等硬件負載均衡器,降低成本,減少單點。
3. 服務(wù)自動注冊與發(fā)現(xiàn),不再需要寫死服務(wù)提供方地址,注冊中心基于接口名查詢服務(wù)提供者的IP地址,并且能夠平滑添加或刪除服務(wù)提供者。
介紹

在使用Dubbo開發(fā)時,我們一般將項目分為如下3個模塊
api:將服務(wù)提供者和服務(wù)消費者都需要用到的接口放在api層
consumer:服務(wù)消費者
producer:服務(wù)提供者
假如有如下一個場景,我們需要查詢用戶的信息,用戶請求發(fā)送到consumer這個服務(wù),然后consumer這個服務(wù)調(diào)用producer這個服務(wù)獲取到用戶信息,并返回給用戶
Api模塊實現(xiàn)
用戶信息封裝到UserInfo類中,因為需要網(wǎng)絡(luò)傳輸,所以需要實現(xiàn)序列化接口
public class UserInfo implements Serializable {
private String userId;
private String phoneNum;
private String userAddress;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
}
用戶信息接口,producer模塊寫這個接口的實現(xiàn),consumer模塊寫這個接口的調(diào)用
producer模塊實現(xiàn)
我們只需要引入對應(yīng)的starter和zookeeper模塊即可方便的使用dubbo
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.6</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
producer模塊寫接口的實現(xiàn)即可
@Service
public class UserServiceImpl implements UserService {
@Override
public UserInfo hello(String username) {
UserInfo userInfo = new UserInfo();
userInfo.setUserId("10");
userInfo.setPhoneNum("15810554635");
userInfo.setUserAddress("北京昌平");
return userInfo;
}
}
需要注意的一點是@Service注解是dubbo中的,初學(xué)者容易導(dǎo)入成spring框架的@Service,導(dǎo)致服務(wù)導(dǎo)出失敗
import org.apache.dubbo.config.annotation.Service;
啟動類上需要加上@EnableDubbo注解
@EnableDubbo
@SpringBootApplication
public class ProducerApp {
public static void main(String[] args) {
SpringApplication.run(ProducerApp.class, args);
}
}
application.yaml
server:
port: 8081
spring:
application:
name: springboot-dubbo-producer
dubbo:
registry:
# 注冊中心地址及協(xié)議
address: zookeeper://myhost:2181
在application.yaml指定服務(wù)啟動的端口,服務(wù)名字和注冊中心的地址
consumer模塊實現(xiàn)
consumer端只需要在需要調(diào)用的接口上加上@Reference注解,即可調(diào)用到producer端
@RestController
public class UserController {
@Reference(check = false)
private UserService userService;
@RequestMapping("hello")
public UserInfo hello(@RequestParam("id") String id) {
return userService.hello(id);
}
}
@Reference中check=false表示啟動的時候不去管UserService服務(wù)是否能正常提供服務(wù),這個值默認為true,表示當(dāng)UserService不能提供服務(wù)時,會導(dǎo)致consumer端啟動失敗
application.yaml
server:
port: 8080
spring:
application:
name: springboot-dubbo-consumer
dubbo:
registry:
protocol: zookeeper
address: myhost:2181
同樣在application.yaml指定服務(wù)啟動的端口,服務(wù)名字和注冊中心的地址
{
"userId": "10",
"phoneNum": "158****4635",
"userAddress": "北京昌平"
}
可以看到使用RPC框架后,調(diào)用遠程方法和調(diào)用本地方法一樣簡單
本文github地址:https://github.com/erlieStar/dubbo-learning
以上就是僅用5分鐘極速入門Dubbo使用教程的詳細內(nèi)容,更多關(guān)于Dubbo使用的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java?生成透明圖片的設(shè)置實現(xiàn)demo
這篇文章主要為大家介紹了Java?生成透明圖片的設(shè)置實現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02
SpringBoot2.1.x,創(chuàng)建自己的spring-boot-starter自動配置模塊操作
這篇文章主要介紹了SpringBoot2.1.x,創(chuàng)建自己的spring-boot-starter自動配置模塊操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Jenkins Host key verification failed問題解決
這篇文章主要介紹了Jenkins Host key verification failed問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11
SpringBoot集成redis實現(xiàn)分布式鎖的示例代碼
這篇文章主要介紹了SpringBoot集成redis實現(xiàn)分布式鎖的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Java異常 Factory method''sqlSessionFactory''rew exception;este
這篇文章主要介紹了Java異常 Factory method ‘sqlSessionFactory‘ threw exception; nested exception is java.lang.NoSuchMethodError:,本文介紹了springboot 引入mybatis-plus后報錯的解決方案,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07
mybatis Mapper的xml文件中resultType值的使用說明
這篇文章主要介紹了mybatis Mapper的xml文件中resultType值的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10

