最近在公司部署一个项目的时候用了zookepper做注册中心的分布部署,心血来潮自己弄一个demo做测试。参考了一些百度的教程
1:zookepper安装部署
下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper
直接tar -zxvf 解压
conf复制 zoo_sample.cfg为zoo.cfg
修改当前安装目录
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/log
添加节点
server.1=localhost:2888:3888(自己的虚拟机没有修改主机名,直接localhost)
其他默认。参数说明:
#tickTime: zookeeper中使用的基本时间单位, 毫秒值.
#dataDir: 数据目录. 可以是任意目录.
#dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和#dataDir相同的设置.
#clientPort: 监听client连接的端口号.
bin目录 sh zkServer.sh start启动。 status可以看到为单机运行状态。
有的zookeeper默认集成了jetty,所以启动时会占用8080端口,查看zookepper.out日志可以看到。所以如果占用了8080端口那么下边如果在同一台服务器上部署tomcat之类的
要注意下。
2:部署dubbo后台(真实应用环境中不需要,这里部署只是为了观察方便)
下载地址:http://github.com/alibaba/dubbo
解压进入admin目录,打包mvn package -Dmaven.skip.test=true
拷贝到tomcat中直接启动。
http://192.168.1.91:8080/dubbo-admin-2.5.6 root root
在后台上可以看到后续你注册的消费者和服务者。
3:创建dubbo服务端
我使用的是idea,为了方便测试所以直接用了spring boot,一键搭建mani启动很方便,有兴趣的可以使用常规springmvc框架集成dubbo测试。
直接新建项目,选择spring Initializr,选择web,一路next finish。框架搭建完成起名dubbo-provider
pom引入所需jar包
com.alibaba dubbo 2.4.10 spring org.springframework org.apache.zookeeper zookeeper 3.4.6 slf4j-log4j12 org.slf4j com.github.sgroschupf zkclient 0.1
创建测试接口
TestService
/** * Created by huiyunfei on 2017/11/1. */ public interface TestService { public String sayHello(String str); }
实现类:
/** * Created by huiyunfei on 2017/11/1. */ public class TestServiceImpl implements TestService { @Override public String sayHello(String str) { return "hello word:"+str; } }
resources下添加dubbo配置文件 dubbo-providers.xml
xml version="1.0" encoding="UTF-8"?>xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="dubbo-provider" owner="dubbo-provider"/> <dubbo:registry address="zookeeper://192.168.1.91:2181" check="false" subscribe="false"/> <dubbo:service interface="com.huizhou.service.TestService" ref="testService"/> id="testService" class="com.huizhou.service.TestServiceImpl">
具体每个参数的含义自己可以百度,我只做测试,所以很多东西都是直接拷贝的,查一下都知道了所以没有具体研究
启动函数添加配置文件读取
@SpringBootApplication @ImportResource(value = {"classpath:dubbo-providers.xml"}) public class DubboApplication { public static void main(String[] args) { SpringApplication.run(DubboApplication.class, args); } }
直接main启动。去dubbo后台观察可以看到提供者和服务已创建。
4:创建dubbo客户端
查了好多使用maven的做这个测试都是建在了同一个项目中,引用了一个共同的api和父类。为了简明结合现实中使用,我直接新建了一个毫无关联的项目。
同3,直接new project dubbo-consumer
pom引入jar包。
新建测试类TestController
* Created by huiyunfei on 2017/11/1. */ @RestController @EnableAutoConfiguration @RequestMapping("/test") public class ClientController { //@Resource @Autowired private TestService testService; @RequestMapping("/hello") public String say(){ System.out.println("==============="); return testService.sayHello("success"); }
注意:
这里的TestService使用的是服务端的接口类,如果服务端和客户端在同一个项目中就可以直接引用。
如果和我一样不在同一个项目,这里需要新建一个一模一样的接口类,包括路径。
现实应用中可以把服务端的接口类拷贝过来或者把所有的接口直接打一个jar包出来导入客户端。
新建dubbo-consumer.xml配置文件:
xml version="1.0" encoding="UTF-8"?>xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="dubbo-consumer"/> <dubbo:registry check="false" address="zookeeper://192.168.1.91:2181"/> <dubbo:reference interface="com.huizhou.service.TestService" id="testService"/>
同理启动函数中添加对配置文件的读取
@ImportResource({ "classpath:dubbo-consumer.xml" })
main函数启动。
这里注意,因为我本地直接两个spring boot项目启动,第一个服务端默认占用了8080,所以客户端需要改一下端口,application.properties添加
server.port=8012
在dubbo后台可以查看已经有消费者注册
chrome直接访问客户端接口地址:
http://localhost:8012/test/hello
完成。