第一个dubbo程序
Dubbo是阿里SOA服务化治理方案的核心框架,它提供了注册中心机制,解耦了消费方和服务方动态发现的问题,并提供高可靠能力,大量采用为内核+富插件设计思想,包括框架自身核心特性都作为扩展点实现,提供灵活的可扩展能力。
上图是Dubbo的架构图,其中Provider在启动时会向注册中心把自己的元数据注册上去(比如服务IP和端口等),Consumer在启动时从注册中心订阅(第一次订阅会拉取全量数据)服务提供方的元数据,注册中心发生数据变更会推送给订阅的Consumer。在获取服务元数据后,Consumer可以发起RPC调用,在RPC调用前后会向监控中心上报统计信息(比如并发数和调用的接口)。
下面我们就使用Dubbo搭建一个简单的Demo。
安装Zookeeper
从Zookeeper的官网下载Zookeeper的安装包,解压到任意目录,作为安装目录install_directory
新建环境变量ZK_HOME,指向${install_directory}/
将${ZK_HOME}/bin路径,添加到可执行路径
在${ZK_HOME}/conf路径下复制一份配置文件zoo_sample.cfg,并重命名为zoo.cfg
在终端执行zkServer.sh start即可,默认会监听2181端口。
第一个dubbo程序
新建一个Maven项目,依赖为:
1 | <dependencies> |
然后新建三个子模块:
- first-dubbo-service:对外暴露的服务,所有对外暴露的接口,都在这边
- first-dubbo-server:first-dubbo-service的实现方,实现了first-dubbo-service暴露的接口
- first-dubbo-client:服务调用方
基于XML配置实现
first-dubbo-service
首先声明一个HelloService接口,提供一个hello方法
1 | public interface HelloService { |
first-dubbo-server
定义一个HelloService的实现类,实现了HelloService的hello方法
1 | public class HelloServiceImpl implements HelloService { |
接着编写一个启动类,它做的主要是从指定的XML配置文件中读取配置,并启动
1 | public class HelloServerApplication { |
spring/hello-server.xml配置文件内容为:
1 |
|
启动完成之后,打开XShell,执行命令telnet localhost 20880
连接上dubbo。
然后输入invoke com.dubbo.service.HelloService.hello("huhansan")
发起调用,调用的格式为invoke [接口.fangfa ]
上图为调用成功,标明Server服务成功启动,并且成功响应了调用。
first-dubbo-client
client的启动代码如下:
1 | public class HelloClientApplication { |
其中spring/hello-client.xml配置为:
1 |
|
运行消费方的方法可得结果:
基于注解实现
所有依赖保持不变。
first-dubbo-server
HelloService实现类修改为:
1 |
|
在类上使用注解@Service标记
HelloServerApplication修改为:
1 | public class HelloServerAnnotationApplication { |
first-dubbo-client
HelloClientApplication修改为:
1 | public class HelloClientAnnotationApplication { |
新增一个HelloClientAnnotation类:
1 |
|
通过注解消费服务时,只需要@Reference注解标注,该注解适用于对象字段和方法中。因此需要做一下特殊的包装。
基于代码实现
所有依赖保持不变
first-dubbo-server
HelloServerApplication修改为:
1 | public class HelloServerApiApplication { |
first-dubbo-client
HelloClientApplication修改为:
1 | public class HelloClientApiApplication { |