Dubbo进阶(十三)——Dubbo入门 Demo:Spring + Zookeeper + Dubbo

📅 2026/8/7 17:12:29
Dubbo进阶(十三)——Dubbo入门 Demo:Spring + Zookeeper + Dubbo
了解Dubbo以后自然要搭建一个简单的Demo实现。本文采用Dubbo与Zookeeper、Spring框架的整合。主要是以下几个步骤安装Zookeeper,启动创建MAVEN项目构建DubboZookeeperSpring实现的简单Demo安装Dubbo-admin实现Dubbo服务治理。Zookeeper介绍与安装Demo中的Dubbo注册中心采用的是Zookeeper。为什么采用Zookeeper呢Zookeeper是一个分布式的服务框架是树型目录服务的数据存储能做到集群管理数据这里能很好的作为Dubbo服务的注册中心。Dubbo能与Zookeeper配合做到集群部署当提供者出现断电等异常停机时Zookeeper注册中心能自动删除提供者信息当提供者重启时能自动恢复注册数据以及订阅请求。具体的安装方法在此不一一叙述可参考博文 《ZooKeeper进阶一Zookeeper简介》、《ZooKeeper进阶二ZooKeeper的运行》。安装完成后进入到bin目录并且启动zkServer.cmd脚本中会启动一个java进程。注需要先启动zookeeper后后续dubbo demo代码运行才能使用zookeeper注册中心的功能。2. 创建MAVEN项目项目结构主要分三大模块dubbo-api: 存放公共接口dubbo-consumer: 调用远程服务dubbo-provider: 提供远程服务。下面将详细叙述代码构建过程。首先构建MAVEN项目导入所需要的jar包依赖。 需要导入的有spring,dubbo,zookeeper等jar包。创建dubbo-api的MAVEN项目(有独立的pom.xml用来打包供提供者、消费者使用)。在项目中定义服务接口该接口需单独打包在服务提供方和消费方共享。packagecom.alibaba.dubbo.demo;importjava.util.List;publicinterfaceDemoService{ListStringgetPermissions(Longid);}创建dubbo-provider的MAVEN项目(有独立的pom.xml用来打包供消费者使用)。实现公共接口此实现对消费者隐藏packagecom.alibaba.dubbo.demo.impl;importcom.alibaba.dubbo.demo.DemoService;importjava.util.ArrayList;importjava.util.List;publicclassDemoServiceImplimplementsDemoService{publicListStringgetPermissions(Longid){ListStringdemonewArrayListString();demo.add(String.format(Permission_%d,id-1));demo.add(String.format(Permission_%d,id));demo.add(String.format(Permission_%d,id1));returndemo;}}需加入公共接口所在的依赖用Spring配置声明暴露服务:?xml version1.0encodingUTF-8?beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:dubbohttp://code.alibabatech.com/schema/dubboxsi:schemaLocationhttp://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-admin或dubbo-monitor会显示这个名字方便辨识--dubbo:application namedemotest-providerownerprogrammerorganizationdubbox/!--使用 zookeeper 注册中心暴露服务注意要先开启 zookeeper--dubbo:registry addresszookeeper://localhost:2181/!--用dubbo协议在20880端口暴露服务--dubbo:protocol namedubboport20880/!--使用 dubbo 协议实现定义好的api.PermissionService接口--dubbo:serviceinterfacecom.alibaba.dubbo.demo.DemoServicerefdemoServiceprotocoldubbo/!--具体实现该接口的 bean--bean iddemoServiceclasscom.alibaba.dubbo.demo.impl.DemoServiceImpl//beans启动远程服务packagecom.alibaba.dubbo.demo.impl;importorg.springframework.context.support.ClassPathXmlApplicationContext;importjava.io.IOException;publicclassProvider{publicstaticvoidmain(String[]args)throwsIOException{ClassPathXmlApplicationContextcontextnewClassPathXmlApplicationContext(provider.xml);System.out.println(context.getDisplayName(): here);context.start();System.out.println(服务已经启动...);System.in.read();}}创建dubbo-consumer的MAVEN项目(可以有多个consumer但是需要配置好)调用所需要的远程服务通过Spring配置引用远程服务?xml version1.0encodingUTF-8?beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:dubbohttp://code.alibabatech.com/schema/dubboxsi:schemaLocationhttp://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.xsddubbo:application namedemotest-consumerownerprogrammerorganizationdubbox/!--向 zookeeper 订阅 provider 的地址由 zookeeper 定时推送--dubbo:registry addresszookeeper://localhost:2181/!--使用 dubbo 协议调用定义好的api.PermissionService接口--dubbo:reference idpermissionServiceinterfacecom.alibaba.dubbo.demo.DemoService//beans启动Consumer,调用远程服务packagecom.alibaba.dubbo.consumer;importcom.alibaba.dubbo.demo.DemoService;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassConsumer{publicstaticvoidmain(String[]args){//测试常规服务ClassPathXmlApplicationContextcontextnewClassPathXmlApplicationContext(consumer.xml);context.start();System.out.println(consumer start);DemoServicedemoServicecontext.getBean(DemoService.class);System.out.println(consumer);System.out.println(demoService.getPermissions(1L));}}运行项目先确保provider已被运行后再启动consumer模块运行提供者消费者成功调用提供者所提供的远程服务当然这只是一个模拟的项目实际中有多提供者多消费者情况比这要复杂的多当然只有这样才能体现dubbo的特性。Dubbo管理控制台介绍管理控制台功能路由规则动态配置服务降级访问控制权重调整负载均衡下载dubbo-admin可自行根据网上介绍安装。大致做法就是将dubbo-admin中的某个文件夹内容替换到tomcat的webapps中再运行tomcat即可。但我在实际操作中发现JDK8无法运行后来找到一个JDK8可以实现的dubbo-admin版本下载地址点我下载成功开启输入用户名、密码root后即可进入控制台首页查看消费者提供者情况查看服务提供者查看服务消费者很遗憾官方Dubbo网址早已不维护了也出现了很多更新的Dubbo比如当当网的Dubbox可以自行了解。附Zookeeper下载地址:点我下载Dubbo-admin下载地址:点我下载Dubbo-monitor下载地址:点我下载