Apache Dubbo实践:15分钟构建分布式集群服务

Apache Dubbo让调用远程方法像调用本地一样。

相信很多小伙伴都知道,最近很流行使用springcloud,全家桶用起来不亦乐乎。但是本文介绍的恰巧相反,是阿里巴巴开源的一款性能优异的分布式RPC框架。随着阿里巴巴重新维护Apache Dubbo,相信会有越来越多的小伙伴会接触到并喜欢上它。本文介绍的是2.7.1版本Dubbo,结合springboot使用注解方式开发,注册中心使用Zookeeper 3.4.11,快速开发你的分布式集群服务。

Dubbo架构

Provider:服务提供方。比如电商系统中的用户服务、订单服务、支付服务、库存服务、日志服务等等。

Consumer:服务消费方。消费方通过注册中心订阅服务,调用服务提供方。

Registry:注册中心。比如Zookeeper,进行服务注册与发现。

Monitor:监控中心。统计服务调用次数和时间。

服务提供方在启动服务时,向注册中心注册自己提供的服务。服务消费方在启动服务时,向注册中心订阅自己所需要消费的服务。

让咱们来一起做个Demo吧!

搭建父工程 dubbo-all

新建maven父工程dubbo-all,子模块有三个:

dubbo-demo-api dubbo-demo-provider(springboot工程) dubbo-demo-consumer(springboot工程)

dubbo-demo-api中定义服务提供接口,dubbo-demo-provider中做实现。dubbo-demo-consumer为服务消费方,调用dubbo-demo-provider提供的服务。

父工程dubbo-all pom文件如下:

4.0.0 2.1.1.RELEASE 2.7.1 org.springframework.boot spring-boot-starter-parent 2.1.5.RELEASE com.dubbo.demo dubbo-all 1.0-SNAPSHOT pom dubbo-demo-api dubbo-demo-provider dubbo-demo-consumer

服务接口 dubbo-demo-api

在dubbo-demo-api工程中定义接口方法sayHello()如下:

pom文件如下:(依赖版本应该定义在父工程中)

4.0.0 com.dubbo.demo dubbo-all 1.0-SNAPSHOT com.dubbo.demo.api dubbo-demo-api 1.0.0 dubbo-demo-api Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.apache.dubbo dubbo 2.7.1 org.apache.zookeeper zookeeper 3.4.13 org.apache.curator curator-framework 2.8.0 org.apache.curator curator-recipes 2.8.0 org.springframework.boot spring-boot-maven-plugin

服务提供方 dubbo-demo-provider

在dubbo-demo-provider中引入dubbo-demo-api依赖,实现sayHello接口:

注意需在springboot启动类中加入@EnableDubbo注解

dubbo-demo-provider pom文件如下:

4.0.0 com.dubbo.demo dubbo-all 1.0-SNAPSHOT com.dubbo.demo.provider dubbo-demo-provider 1.0.0 dubbo-demo-provider provider project for Spring Boot 1.8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test com.dubbo.demo.api dubbo-demo-api 1.0.0 org.springframework.boot spring-boot-maven-plugin

dubbo-demo-provider 配置文件如下:

application.yml

spring: application: name: dubbo-demo-provider server: port: 8088 dubbo: application: name: dubbo-demo-provider registry: address: zookeeper://localhost:2181 protocol: name: dubbo port: 20880

服务消费方 dubbo-demo-consumer

此时我们便可以在consumer中注入HelloService接口,远程调用sayHello方法。


dubbo-demo-consumer中引入dubbo-demo-api依赖,pom文件如下:

4.0.0 com.dubbo.demo dubbo-all 1.0-SNAPSHOT com.dubbo.demo.consumer dubbo-demo-consumer 0.0.1-SNAPSHOT dubbo-demo-consumer Consumer project for Spring Boot 1.8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test com.dubbo.demo.api dubbo-demo-api 1.0.0 org.springframework.boot spring-boot-maven-plugin

dubbo-demo-consumer 配置文件如下:

application.yml

spring: application: name: dubbo-demo-consumer server: port: 8089 dubbo: application: name: dubbo-demo-consumer registry: address: zookeeper://localhost:2181 protocol: name: dubbo port: 20880

开发步骤到此完成。

注册中心 Zookeeper

下载zookeeper解压到本地,在conf目录下新建zoo.cfg文件,启动zookeeper。注意:使用JAVA8没有配置环境变量的小伙伴,启动Zookeeper可能会报错。建议配置一下环境变量。假如实在不想配置,可更改bin目录下zkEnv.cmd文件,去掉java home校验,设置JAVA目录如下:

启动zookeeper:

验证结果

启动服务提供方dubbo-demo-provider:

启动服务消费方dubbo-demo-consumer:

在浏览器中访问服务消费方提供的地址:

http://localhost:8089/test/sayHello

可以看到服务远程调用成功!


服务监控 dubbo-admin

平常大家启动dubbo-admin基本都是下载dubbo-admin代码打成war包部署到tomcat上。本次展示springboot版本dubbo-admin,无需打包。

上Github找到dubbo-admin,下载master分支代码。(要求使用dubbo 2.6版本以上)

https://github.com/apache/incubator-dubbo-admin

将下载好的代码导入IntelliJ IDE中:

更改application.properties文件中用户名密码:

启动dubbo-admin springboot工程:

在浏览器中输入地址:(端口可自行更改)

http://localhost:7001

输入用户名密码:

登陆之后即可对咱们的服务进行管理,比如升降权等。


原创不易,客观点个赞吧!