dubbo和zookeeper
- Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
- ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
dubbo实现各模块的rpc调用,而zookeeper相当于一个管理员。各模块需要先在zookeeper中注册,如果A模块想使用B模块的服务,先要到zookeeper中找到B的地址,然后使用rpc调用。
1. 在docker中安装和启动zookeeper
1 | docker pull docker.io/zookeeper |
2. 卖票和买票的例子
- 在idea中创建两个模块,买票模块和卖票模块
- 在两个模块的pom文件中加入dubbo和zkclient的依赖
1 | <dependency> |
- 在卖票模块的配置文件中配置注册中心的地址,要扫描的包(要注册的服务)
1
2
3
4
5dubbo.application.name=provider.ticket
dubbo.registry.address=zookeeper://192.168.124.6:2181
dubbo.scan.base-packages=com.hjznb.provider.service - 在买票模块中编写服务代码,在要发布的类上加上dubbo的service注解,会将该服务发布出去
1 | package com.hjznb.provider.service; |
- 在买票模块中创建所要使用的卖票模块中的类(全类名要一致)
1 | package com.hjznb.provider.service; |
- 在买票代码中使用该服务,需要用@Reference注解来标明要引用的类,duboo会从zookeeper中引用该类。
1 | import com.alibaba.dubbo.config.annotation.Reference; |
- 先启动卖票模块,再到买票模块中进行测试,控制台输出:买到了《泰坦尼克号》
1 |
|
注意:需要再两个模块的启动类上加上@EnableDubbo注解才能使用dubbo,否则会产生空指针异常!
3. 总结
将服务提供者注册到注册中心的步骤:
- 引入dubbo和zkclient
- 配置dubbo的扫描包和注册中心地址
- 使用@Service发布服务,是dubbo包下的service注解
消费者消费的步骤:
- 引入依赖
- 配置注册中心地址
- 引用服务@Reference