本文将实现使用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,就需要导入对应的依赖
org.apache.dubbo
dubbo-spring-boot-starter
2.7.3
com.github.sgroschupf
zkclient
0.1
org.apache.curator
curator-framework
2.12.0
org.apache.curator
curator-recipes
2.12.0
org.apache.zookeeper
zookeeper
3.4.14
org.slf4j
slf4j-log4j12
在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
+