基于SpringBoot整合Dubbo+Zookeeper
一、基本介绍
2、ZooKeeper:是Google的Chubby一个开源的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
二、安装配置
1、安装配置过程
//ZooKeeper 1、下载 链接:https://pan.baidu.com/s/1dukbp2Ld54Mqtnt9F6Igyw 提取码:o8e6 2、安装 解压 3、配置 (1)复制zookeeper-3.4.14\conf\zoo_sample.cfg,重命名为zoo.cfg (2)打开zoo.cfg,添加data目录及log目录的路径配置 #dataDir=/tmp/zookeeper dataDir=D:\\Study\\other\\Dubbo_ZooKeeper\\DownLoad\\temp\\data dataLogDir=D:\\Study\\other\\Dubbo_ZooKeeper\\DownLoad\\temp\\log 4、运行 (1)打开cmd (2)切换至目录zookeeper-3.4.14\bin (3)执行zkServer.cmd //Dubbo 1、下载 链接:https://pan.baidu.com/s/193xCvde4clGJRXShTP14mg 提取码:x9rt 2、安装 解压 3、配置及运行 (1)cmd进入目录Dubbo\dubbo-dubbo-2.5.8\dubbo-admin (2)执行mvn clean install命令,进行项目打包(注:打包过程可能需要耗时大约30分钟) (3)将dubbo.war包放入tomcat的webapps目录下 (4)然后到tomcat的bin目录下执行startup.bat,启动tomcat 4、访问 (1)浏览器输入localhost:8080/dubbo-admin-2.5.8,如果启动成功就可以在浏览器访问dubbo页面了,登录用户和密码:root/root 注:8080端口指的是你的本地tomcat实际运行端口,dubbo-admin-2.5.8为项目名
2、成果
(1)Zookeeper启动成功
(2)Dubbo配置成功
//打包成功
//启动成功
三、整合DUbbo和ZooKeeper
1、整合过程
//基于SpringBoot进行DUbbo和Zookeeper整合(目录结构如图所示) 1、创建父项目:DubboAndZookeeper_study //添加相关的配置:父框架、编码及JDK版本配置、公共依赖集、工具集 <!-- 引入继承SpringBoot框架父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.17.RELEASE</version> <relativePath/> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <!-- 引入SpringBoot的测试依赖 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.0.0.RELEASE</version> </dependency> <!-- dubbo --> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <!-- zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.8</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 2、创建公共服务api子项目:common_api //创建公共api接口 /** * 提供公共服务api接口 */ public interface HelloService { public String sayHello(String message); } 3、创建服务提供者子项目:service_provider //实现服务接口(需要注意的是此处的Service注解为dubbo的注解!!) /** * 服务提供方:实现公共api接口 */ @Service(interfaceClass = HelloService.class) public class HelloServiceImpl implements HelloService { public String sayHello(String message){ return "hello:"+message; } } //添加项目启动类 /** * 项目启动类 */ @EnableDubbo @SpringBootApplication public class MainApplication { public static void main(String[] args){ SpringApplication.run(MainApplication.class,args); } } //添加项目配置 server: port: 9001 dubbo: application: # 服务名称,保持唯一 name: server-provider # zookeeper地址,用于向其注册服务 registry: protocol: zookeeper address: zookeeper://127.0.0.1:2181 protocol: name: dubbo port: 20880 scan: base-packages: com.lkw.impl 4、创建服务消费者子项目:service_consumer //添加控制器,用于访问服务 /** * 服务消费方:请求调用服务 */ @RestController public class HelloController { @com.alibaba.dubbo.config.annotation.Reference private HelloService helloService; @RequestMapping("/sayHello") public String sayHello(String message){ return helloService.sayHello(message); } } //添加项目启动类 /** * 项目启动类 */ @SpringBootApplication @EnableDubboConfig public class MainApplication { public static void main(String[] args){ SpringApplication.run(MainApplication.class,args); } } //添加项目配置 server: port: 9003 dubbo: application: # 服务名称,保持唯一 name: server-consumer # zookeeper地址,用于向其注册服务 registry: protocol: zookeeper address: zookeeper://127.0.0.1:2181 scan: base-packages: com.lkw.controller 5、调试 //启动service_provider //启动service_consumer //访问dubbo,观察注册中心是否已发现提供者和消费者两个应用,以及服务HelloService //浏览器模拟客户端访问service_consumer:localhost:9003/sayHello,观察页面显示,通过dubbo实现rpc访问是否成功
2、成果
(1)目录结构
(2)基于ZooKeeper的Dubbo服务发现生效
(3)Dubbo的RPC生效服务消费者成功访问服务提供者的服务
四、FAQ问题集锦
1、在cmd里执行“mvn clean install”命令后提示“mvn为不识别批处理名令”?
原因:未安装maven工具或未给maven工具进行环境变量配置
解决方法:在环境变量->系统变量->Path->新增maven的安装bin路径,例:D:/maven/bin。最后重新打开cmd即可
解决:把dubbo关掉,重新启动ZK再重新启动dubbo服务