分布式系统开发(4)——Dubbo+Zookeeper(RPC服务)

分布式系统开发(4)——Dubbo+Zookeeper(RPC服务) 系列文章本文在前文基础上进行开发:关于Zookeeper的使用方式可以看这篇 文章windows下Zookeeper的介绍、下载、安装先保证Zookeeper已经安装和启动本文在上文基础上开发上文结构如下1.父模块增加依赖点击父模块的pom.xml增加dubbo和zookeeper的相关依赖参考代码如下:?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.guo/groupIdartifactIdds-demo/artifactIdversion1.0-SNAPSHOT/versionpackagingpom/packagingmodulesmoduleds-minio/modulemoduleds-redis/modulemoduleds-rabbit/module/modulesparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.2/versionrelativePath//parentpropertiesjava.version17/java.versionminio.version8.4.3/minio.versiondubbo.version3.3.0/dubbo.version/propertiesdependencyManagementdependenciesdependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion${minio.version}/version/dependency!-- Dubbo 核心依赖 --dependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-spring-boot-starter/artifactIdversion${dubbo.version}/version/dependency!-- Dubbo 依赖的 ZooKeeper 客户端Curator --dependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-dependencies-zookeeper-curator5/artifactIdversion${dubbo.version}/versiontypepom/type/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependencies/project添加完后记得刷新一下mvn clean install2.dubbo-api模块dubbo-api 不依赖任何 Spring Boot 组件只定义 Java 接口。2.1 创建模块右击父模块选择 “新建”—“模块”左侧选择“java”然后输入ds-api构建方式选mavenjdk选17然后点击“创建”2.2 修改依赖文件pom.xml创建完后点击本模块ds-api的依赖文件把多余的内容删掉。2.3 增加接口文件右击本模块的java文件夹选择“新建”然后点击“软件包”软件包名为com.guo.dubbo.api然后继续右击刚才创建的api文件夹然后选择“新建”再选择“Java类”类名为UserService参考代码如下packagecom.guo.dubbo.api;publicinterfaceUserService{StringgetUserInfo(StringuserId);voidupdateUserAvatar(StringuserId,StringavatarUrl);}创建完后项目结构如下3.dubbo-provider模块3.1 创建模块右击父工程选择“新建”然后选择“模块”左侧选”Java“右侧模块名为ds-provier构建系统选Maven,JDK选17然后点击”创建“3.2 增加依赖点击本模块ds-provider的pom.xml文件然后增加依赖代码。参考代码如下?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.guo/groupIdartifactIdds-demo/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdds-provider/artifactIddependencies!-- Dubbo starter --dependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-spring-boot-starter/artifactId/dependencydependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-dependencies-zookeeper-curator5/artifactIdtypepom/type/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependencies/project注意父模块的dubbo-dependencies-zookeeper-curator5已经自动把 Zookeeper Curator 全部传递给子模块了子模块只要引入dependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-spring-boot-starter/artifactIdtypepom/type/dependency就自动拥有Zookeeper 客户端Curator 5 客户端Dubbo 连接 ZK 的所有功能3.3 新增配置文件右击本模块ds-provider的resources文件夹 选择”新建“,然后点击”文件“文件名为application.yml参考内容如下server:port:8090# HTTP 管理端口健康检查等dubbo:application:name:demo-provider# 服务名称在注册中心显示registry:address:zookeeper://localhost:2181# 注册中心地址protocol:name:dubboport:20880# Dubbo 服务端口创建完后项目结构如下3.4 服务实现类右击本模块ds-provider的java文件夹选择”新建“然后选择”软件包“包名为com.guo.dubbo.provier.service创建完后继续右击 service文件夹然后选择”新建“再选择”Java类“类名为UserServiceImpl参考代码如下importcom.guo.dubbo.api.UserService;importorg.apache.dubbo.config.annotation.DubboService;importorg.springframework.stereotype.Component;DubboServiceComponentpublicclassUserServiceImplimplementsUserService{OverridepublicStringgetUserInfo(StringuserId){System.out.println([Provider] getUserInfo called, userIduserId);returnProvider: user userId info from Dubbo;}OverridepublicvoidupdateUserAvatar(StringuserId,StringavatarUrl){System.out.println([Provider] update avatar, userIduserId, urlavatarUrl);// 这里可以调用数据库更新逻辑}}创建完后项目如下3.5 修改启动类右击本模块ds-provider的provider文件夹然后选择”新建“再选择”Java类“类名为ProviderApplication参考代码如下importorg.apache.dubbo.config.spring.context.annotation.EnableDubbo;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplicationEnableDubbopublicclassProviderApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ProviderApplication.class,args);}}创建完后项目结构如下4.dubbo-consume模块4.1 新增模块右击父模块选择”新建“然后选择”模块“这里右侧选”java“模块名为ds-consumer构建系统选Maven, JDK选17然后选”创建“4.2 修改依赖文件右击本模块ds-consumer的配置文件增加下面的依赖。然后刷新依赖mvn clean install参考依赖代码如下?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.guo/groupIdartifactIdds-demo/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdds-consumer/artifactIddependencies!-- Dubbo starter --dependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-spring-boot-starter/artifactId/dependencydependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-dependencies-zookeeper-curator5/artifactIdtypepom/type/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependencies/project4.3 新增配置文件右击本模块的ds-consumer)文件夹选择”新建“然后选择”文件“配置文件名为application.yml参考代码如下server:port:8084# 消费者 HTTP 服务端口dubbo:application:name:demo-consumerregistry:address:zookeeper://localhost:2181consumer:check:false# 启动时不检查服务提供者是否存在避免启动报错创建完后项目结构如下4.4 新增控制器类右击本模块ds-consumer文件夹选择”新建“然后选择”软件包“软件包名为com.guo.dubbo.comsumer.controller创建完后右击controller文件夹选择”新建“再选择”Java 类“。控制器的类名为UserController参考代码如下importcom.guo.dubbo.api.UserService;importorg.apache.dubbo.config.annotation.DubboReference;importorg.springframework.web.bind.annotation.*;RestControllerRequestMapping(/api/user)publicclassUserController{DubboReferenceprivateUserServiceuserService;GetMapping(/{userId})publicStringgetUser(PathVariableStringuserId){returnuserService.getUserInfo(userId);}}创建完后项目结构如下4.5 修改启动类右击本模块ds-consumer模块的consumer文件夹然后选择”新建“再选择”Java类“。启动类名为ConsumerApplication参考代码如下importorg.apache.dubbo.config.spring.context.annotation.EnableDubbo;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplicationEnableDubbopublicclassConsumerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ConsumerApplication.class,args);}}创建完后项目结构如下5.测试先启动生产者。启动后可以在控制台看到启动成功的信息。然后再启动消费者模块。在浏览器中输入下面的请求地址http://localhost:8084/api/user/123可以看到返回下面的信息。同时在生成者模块的输出可以看到下面的信息。再查看一下zookeeper的注册打开zookeeper的安装目录进入到bin目录双击运行zkCli.cmd然后输入 ls /dubbo就可以看到注册到zookeeper的信息。本文源代码ds-demo4.zip链接:https://pan.baidu.com/s/1e0-roVPL0RlDUp7iT_UAVw?pwdymm4