参考源码说明: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>