Springboot2+Dubbo0.2.0+Zookeeper搭建一个简单的RPC分布式案例
简介
Dubbo: 原阿里巴巴的开源分布式服务,现在转给apache接管名为Apache Dubbo,是一个高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
Zookeeper: 是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
Springboot这里我就不介绍了,不懂的可以去看看官网(java开发工程师必会技能)。
下面直接搭建环境:前提必须有zookeeper:docker安装zookeeper
这里我还是使用的旧版的dubbo和springboot的整合
版本依赖:官网版本依赖
provider-ticket模块
目录结构:
1.导入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--dubbo分布式框架依赖-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<!--引入zookeeper的客户端工具-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
2.主启动类
@EnableDubbo //开启基于注解的Dubbo
@SpringBootApplication
public class ProviderTicketApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderTicketApplication.class, args);
}
}
3.编写service层接口和实现类:这里service注解是dubbo中的
public interface TicketService {
String getTicket();
}
@Component //该类是一个组件加入到spring容器中
@Service //是dubbo的注解,表明该服务发布出去
public class TicketServiceImpl implements TicketService {
@Override
public String getTicket() {
return "<厉害了,我的国>";
}
}
4.springboot配置文件:
server.port=8081
#配置服务名
dubbo.application.name=provider-ticket
#配置zookeeper仓库地址
dubbo.registry.address=zookeeper://安装zookeeper虚拟机ip:2181
#扫描需要发布的服务路径
dubbo.scan.base-packages=com.yang.providerticket.service
consumer-user模块
目录结构:
1.导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--dubbo分布式框架依赖-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<!--引入zookeeper的客户端工具-->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
2.创建sevice层类: 使用@Reference
@Service
public class UserService {
@Reference //远程引用 通过全类名匹配
TicketService ticketService;
public void hello(){
System.out.println(ticketService.getTicket());
}
}
3.springboot配置文件:
server.port=8082
dubbo.application.name=consumer-user
dubbo.registry.address=zookeeper://虚拟机ip:2181
4.将provider-ticket层的接口复制一份: (目录结构一定要和原来的一样)
在consumer测试环境测试
@Autowired
UserService userService;
/**
* 1.provider开启
* 2.zookeeper开启
*/
@Test
void contextLoads() {
userService.hello();
}
运行结果: