Dubbo项目入门

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
它的特性如下
• 面向接口代理的高性能RPC调用
• 智能负载均衡
• 服务自动注册与发现
• 高度可扩展能力
• 运行期流量调度
• 可视化的服务治理与运维
Talk is cheap, Show me the code。现在来着手搭建一个Dubbo项目吧。
搭建一个xml配置的Dubbo项目
创建三个项目
• service-api 服务提供者和服务消费者共用的接口
• service-consumer 服务消费者
• service-provider 服务提供者
共用的接口
先在service-api定义一个公用接口

服务提供者
服务提供者service-provider提供一个DemoService的实现类

编写xml配置文件
配置应用名称

配置注册中心
可以使用Multicast、Redis、Zookeeper、Simple这四个作为注册中心。

配置协议
默认为dubbo

定义bean
然后定义bean,以及将bean作为服务暴露出去

main函数
编写一个main函数用于启动服务提供者

服务消费者
服务消费者需要调用service-provider 服务提供者提供的DemoService实现类
同样需要编写xml文件,配置文件和服务提供者的类似,不同的是需要将暴露服务的配置修改为引用服务的配置,如下
引用服务

main函数
编写一个main函数用于启动服务消费者,然后一直循环调用服务提供者提供的服务

测试
先启动service-provider项目,然后在启动service-consumer,输出结果如下

搭建一个注解的Dubbo项目
服务提供者和服务消费者共用的接口还是使用service-api,新建下面两个项目
• service-consumer-annotation 基于注解的服务消费者
• service-provider-annotation 基于注解的服务提供者
基于注解的服务提供者
新建一个springboot项目
同样需要提供一个DemoService的实现类,且在类上增加@Service注解
注:是com.alibaba.dubbo.config.annotation.Service
不是org.springframework.stereotype.Service
别导错了
接下来需要增加dubbo的配置类

最后一步在启动类上增加注解@DubboComponentScan(basePackages = "com.learnDubbo.demo.provider.service")basePackages自行修改为提供服务类所在的包路径
基于注解的服务消费者
也是需要有一个配置类,和服务提供者类似,这里就不贴代码了
接下来创建一个Controller,用于测试结果,代码如下

@Reference注解表示引用服务类似于xml配置

在项目启动类上同样需要注解@DubboComponentScan指定dubbo扫描路径
测试
同xml配置的一样,需要先启动服务提供者

配置信息
配置信息主要包括3大块,注册中心、协议和schema配置

注册中心
注册中心总共有4个,如下

使用Redis注册中心
当使用Redis注册中心,需先把服务提供方和消费放的注册中心xml配置修改为下方

对应的redis会产生如下数据

可以看到有两个key,分别对应服务提供者和消费者。两个key对应的数据类型为Hash,可以看到服务消费者key的数据如下

第一个为URL址,第二个为过期时间。
官网给的图如下

使用Zookeeper注册中心
当使用Zookeeper注册中心,需先把服务提供方和消费放的注册中心xml配置修改为下方

对应的Zookeeper会产生如下数据

下图是官网给出的数据图

有些出入,但大致还是相同的,多了configurators和routers。
当服务提供者启动时: 会创建对应的目录结构,例如我上面代码中的共用接口名为com.learnDubbo.demo.DemoService,就会创建 /dubbo/com.learnDubbo.demo.DemoService目录,然后在创建providers目录,再在providers目录下写入自己的 URL 地址。
当服务消费者启动时:会在/dubbo/com.learnDubbo.demo.DemoService目录创建 consumers目录,并在consumers目录写入自己的 URL 地址。
当监控中心启动时: 订阅 /dubbo/com.learnDubbo.demo.DemoService 目录下的所有提供者和消费者 URL 地址。
协议

schema配置的涉及的东西有点多这里就不列出来了
本文作者:勿妄
本文为云栖社区原创内容,未经允许不得转载。