本文将实现使用springboot+dubbo+zookeeper搭建能够提供远程服务的架构
目录
一. 环境搭建
1. 搭建zookeeper服务
2. 下载dubbo-admin项目,监控服务
二. 创建项目
1. IDEA创建项目
2. 导入依赖
3. 修改配置文件,连接zookeeper
4. 调用服务
1.1 进入zookeeper官网进行下载
https://zookeeper.apache.org/releases.html
注:zookeeper从3.5.x 左右开始,就分为两个包下载,一个是bin的,我们就下载这个bin的,因为这个是已经编译过的,zookeeper可以直接运行。
1.2 启动zookeeper服务
将下载好的压缩包解压后,进入到conf目录下,并copy一份zoo_sample.cfg命名为zoo.cfg(因为zookeeper启动默认会使用改文件名)
在zoo.cfg中,可以查看zookeeper的端口配置等信息
然后进入bin路径下,启动zookeeper服务,运行zkServer.cmd(Linux运行.sh 文件)
1.3 排坑
如果服务启动失败闪退,通过cmd窗口运行可以查看报错信息
如果是JDK问题,可能是java环境变量JAVA_HOME路径带有空格。重新设置下环境变量即可。
1.4 测试
zookeeper服务启动后,可以运行zkCli.cmd启动客户端,测试能够连接成功
dubbo-admin项目时dubbo开发的一个用于检测dubbo服务的开源项目。使用该项目可以很好的监控服务进程
2.1 下载源代码
dubbo-admin的项目托管在github上,可以通过地址:https://github.com/apache/dubbo-admin 下载master分支项目到本地
2.2 运行项目
修改配置文件,可以修改zookeeper连接的IP:
在dubbo-admin项目中的resource下有个application.properties文件,可以修改需要监控的zookeeper服务、端口等
将项目通过mvn打包:mvn clean install -Dmaven.test.skip=true
将生成的jar包运行即可访问,默认的账号密码是:root/root
本例将创建三个项目
provider:服务提供者(接口暴露给zookeeper,供别人远程调用)
cosumer:服务消费者(调用provider的接口)
common:公共实体类
dubbo调用RPC远程服务的本质就是将service实现类注册为一个bean,然后通过dubbo的通讯方式完成调用。
首先创建一个空白项目,然后创建三个springboot项目的module
要想使用dubbo,就需要导入对应的依赖
<!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!--zookeeper--> <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- 引入zookeeper --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> <!--排除这个slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>在provider和cosumer项目中,修改配置文件,连接zookeeper:
对弈provider来说,需要设置扫描的包路径,并且将需要暴露的服务,用dubbo提供的Service修饰
package com.lemon.provider.service; import com.lemon.common.pojo.UserPO; import org.apache.dubbo.config.annotation.Service; /** * dubbo服务提供接口 * 导入的是dubbo下的service注解,指定服务版本,以及该服务对应的接口类,默认是实现的接口 * @Date 2020/10/21 11:45 **/ @Service(version = "1.0.0", interfaceClass = TestService.class) public class TestServiceImpl implements TestService{ @Override public UserPO test() { UserPO po = new UserPO(); po.setId(1); po.setName("测试用户"); return po; } }此时启动provider可以再dubbo-admin中监测到我们启动的服务了
编写消费者,调用服务接口测试:
package com.lemon.cosumer.controller; import com.lemon.common.pojo.UserPO; import com.lemon.provider.service.TestService; import org.apache.dubbo.config.annotation.Reference; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @Date 2020/10/21 12:30 **/ @RestController public class Test { //dubbo提供的调用远程服务的注解 @Reference TestService testService; @RequestMapping("/test") public String test() { UserPO po = testService.test(); return "通过dubbo服务获取的用户名是:" + po.getName() + ",用户ID是:" + po.getId(); } }测试完成:
更多详细信息,请参考github地址源码:
https://github.com/leanmTree/springboot_dubbo
+