參考源碼說明:https://github.com/apache/dubbo-spring-boot-project/blob/0.2.x/README_CN.md
Dubbo版本升級說明:https://github.com/apache/dubbo-spring-boot-project/releases
源碼地址:https://github.com/877148107/springboot_integrate/tree/master/springboot-integrate-dubbo-provider
目錄
-
分佈式應用
在分佈式系統中,國內常用zookeeper+dubbo組合,而Spring Boot推薦使用全棧的Spring,Spring Boot+Spring Cloud。分佈式當中涉及到遠程過程調用RPC框架,以前大多數都是使用的webservice進行調用但是這樣調用比較麻煩,因此現在基本上都使用了RPC框架dubbo、Springcloud。
在分佈式應用調用的過程就會使用的一個註冊中心(zookeeper)和遠程過程調用(dubbo)
-
ZooKeeper
ZooKeeper官網:https://zookeeper.apache.org
ZooKeeper 是一個分佈式的,開放源碼的分佈式應用程序協調服務。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。Zookeeper主要是作爲註冊中心使用。
-
Dubbo
Dubbo官網:http://dubbo.apache.org/zh-cn/
Dubbo是Alibaba開源的分佈式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地松耦合)。從服務模型的角度來看,Dubbo採用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,所以基於這一點可以抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。
dubbo主要用於分佈式服務調用框架。
工作圖:
-
安裝 ZooKeeper
1、docker拉取ZooKeeper鏡像
[root@localhost ~]# docker pull zookeeper
2、啓動ZooKeeper鏡像
[root@localhost ~]# docker run --name zk01 -p 2181:2181 --restart always -d bbebb888169c
-
SpringBoot整合 ZooKeeper、Dubbo
1、創建一個提供者工程
springboot-integrate-dubbo-provider,服務提供者提供一個買票服務。詳細代碼見源碼
1)、引入pom依賴
<!--引入dubbo依賴-->
<!-- https://github.com/apache/dubbo-spring-boot-project/blob/0.2.x/README_CN.md -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
2)、配置dubbo屬性
#名稱
dubbo.application.name=springboot-integrate-dubbo-provider
#發佈到註冊中心的地址
dubbo.registry.address=zookeeper://192.168.0.113:2181
#將那個包下的服務發佈出去
dubbo.scan.base-packages=com.wmy.integrate.service
3)、將服務發佈出去
@org.apache.dubbo.config.annotation.Service
@Component
@Service
public class TicketServiceImpl implements TicketService{
@Override
public String buyTicket() {
return "《熊出沒》";
}
}
4)、啓動工程
2、創建一個消費者工程
springboot-integrate-dubbo-consume,消費者去買一張票,。詳細代碼見源碼
1)、引入pom依賴
<!--引入dubbo依賴-->
<!-- https://github.com/apache/dubbo-spring-boot-project/blob/0.2.x/README_CN.md -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.5</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
2)、配置dubbo屬性
#服務消費者名稱
dubbo.application.name=springboot-integrate-dubbo-consume
#註冊中心的地址
dubbo.registry.address=zookeeper://192.168.0.113:2181
3)、新建一個服務提供接口
包路徑、名稱和類名都一樣
public interface TicketService {
String buyTicket();
}
4)、遠程引用
@Reference
@Service
public class UserService {
@Reference
TicketService ticketService;
public void bugTicket(){
String ticket = ticketService.buyTicket();
System.out.println("電影票:"+ticket);
}
}
5)、測試
@SpringBootTest
class SpringbootIntegrateDubboConsumeApplicationTests {
@Autowired
UserService userService;
@Test
void contextLoads() {
userService.getTicket();
}
}
-
錯誤信息
1.java.lang.NoClassDefFoundError: org/apache/curator/framework/CuratorFrameworkFactory
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.13.0</version>
</dependency>