跑通SpringBoot + dubbo + zookeeper

临文乍了了,彻卷兀若无。这篇文章主要讲述跑通SpringBoot + dubbo + zookeeper相关的知识,希望能为你提供帮助。
先安装并启动zookeeper

  1. 去zookeeper下载网站进行下载??https://archive.apache.org/dist/zookeeper/??
  2. 博主下载的是3.4.9
  3. 解压并启动
tar -zxvf apache-zookeeper-3.4.9.bin.tar.gz
mv apache-zookeeper-3.4.9 zookeeper-3.4.9

cd zookeeper-3.4.9/conf
ll


进入conf目录下后, 可以看到zoo_sample.cfg, 需要先复制一份,不然启动会报错找不到zoo.cfg
cp zoo_sample.cfg zoo.cfg

然后修改一下zoo.cfg中的存储目录, 将默认的dataDir修改为zookeeper-3.4.9下面的data目录下, data需要新建

cd ..
mkdir data
cd bin

开始启动zookeeper服务端
./zkServer.sh start

启动成功后会直接后台启动, 如下即为启动成功

测试是否成功
启动zookeeper客户端
./zkCli.sh

启动成功后输入, 看到zookeeper即为启动成功
ls /


博主因为启动了后面的dubbo-admin,所以有dubbo的目录,这不重要, 初次启动只要有zookeeper就行
安装dubbo-admin进行dubbo监控安装dubbo-admin, 从github上clone??duboo-admin??
  1. 下载
git clone https://github.com/apache/dubbo-admin.git
cd dubbo-admin

注意这里要先去ui里运行一下npm install
cd dubbo-admin-ui
npm install

sudo npm install

  1. 打包并启动
    回到dubbo-admin目录, 使用maven打包一下, 记得要跳过测试, 不然会很慢
mvn clean package -Dmaven.skip.test=ture

进入??dubbo-amdin/dubbo-admin-server/src/main/resources 修改???application.properties??, 新增???server.port=8081`
这里必须要改一下端口号, 因为zookeeper启动会占用8080
然后启动
mvn --projects dubbo-admin-server spring-boot:run

访问??locahost:8081???
登录, 账户和密码都是root, dubbo-admin默认的密码,可以在application.properties中进行修改
新建项目创建一个多模块的项目, 格式如下:
分别为:
接口模块
提供者模块
消费者模块
创建统一接口新建一个模块, pom设置格式??< packaging> jar< /packaging> ???其他的什么jar都不需要引入,

新建接口类,代码如下:
public interface SayHello

public String sayHello(String name);

创建服务提供者pom:
< properties>
< dubbo.version> 3.0.8dubbo.version>
properties>
< dependencies>
< dependency>
< groupId> org.apache.dubbogroupId>
< artifactId> dubbo-spring-boot-starterartifactId>
< version> $dubbo.versionversion>
dependency>

< dependency>
< groupId> org.apache.dubbogroupId>
< artifactId> dubbo-rpc-apiartifactId>
< version> $dubbo.versionversion>
dependency>

< dependency>
< groupId> org.apache.dubbogroupId>
< artifactId> dubbo-rpc-dubboartifactId>
< version> $dubbo.versionversion>
dependency>

< dependency>
< groupId> org.apache.dubbogroupId>
< artifactId> dubbo-registry-zookeeperartifactId>
< version> $dubbo.versionversion>
dependency>

< dependency>
< groupId> org.apache.dubbogroupId>
< artifactId> dubbo-configcenter-zookeeperartifactId>
< version> $dubbo.versionversion>
dependency>

< dependency>
< groupId> org.apache.dubbogroupId>
< artifactId> dubbo-metadata-report-zookeeperartifactId>
< version> $dubbo.versionversion>
dependency>

< dependency>
< groupId> org.apache.dubbogroupId>
< artifactId> dubbo-config-springartifactId>
< version> $dubbo.versionversion>
dependency>

< dependency>
< groupId> org.apache.dubbogroupId>
< artifactId> dubbo-remoting-netty4artifactId>
< version> $dubbo.versionversion>
dependency>

< dependency>
< groupId> org.apache.dubbogroupId>
< artifactId> dubbo-serialization-hessian2artifactId>
< version> $dubbo.versionversion>
dependency>

dependencies>

yml配置文件:
dubbo:
application:

name: dubbo-test-provider
protocol:

name: dubbo
port: 20881
registry:

address: zookeeper://127.0.0.1:2181
config-center:
address: zookeeper://127.0.0.1:2181
metadata-report:
address: zookeeper://127.0.0.1:2181
scan:

base-packages: com.exceedy.dubbotest.dubbotestinterface.service

消费者和提供者pom和配置文件(除服务名称外)均一致
实现
  1. 在启动类中增加??EnableDubbo??注解,然后让提供者进入等待状态
@SpringBootApplication
@EnableDubbo
public class ProviderApplication

public static void main(String[] args) throws InterruptedException
SpringApplication.run(ProviderApplication.class, args);
System.out.println("dubbo provider start");
new CountDownLatch(1).await();



  1. 实现SayService
// springBoot的注解
@Service
// 版本更新到3.0.8后, dubbo原本的@Service标记为了删除, 所以使用新注解
// DubboService 意味着暴露服务
@DubboService
public class SayHelloImpl implements SayHello

@Override
public String sayHello(String name)
System.out.println("Hello, " + name);
return "Hello, " + name;


  1. 启动后刷新dubbo-admin界面

    看到服务已经注册,说明提供者已经完成
创建服务消费者消费者的配置文件和pom直接copy即可, 将yml文件中的dubbo.application.name=dubbo-test-provider 改为dubbo.application.name=dubbo-test-consumers
直接修改启动类
@SpringBootApplication
public class ConsumersApplication

@DubboReference
SayHello sayHello;

public static void main(String[] args)
ConfigurableApplicationContext run = SpringApplication.run(ConsumersApplication.class, args);
ConsumersApplication bean = run.getBean(ConsumersApplication.class);
String result = bean.doSayHi("张三");
System.out.println(result);



public String doSayHi(String name)
return sayHello.sayHello(name);


返回并打印 “Hello 张三”, 调用成功.
至此跑通了springboot + dubbo + zookeeper;
一些坑【跑通SpringBoot + dubbo + zookeeper】需要注意的是
  1. 不知道是否是3.0.8版本的原因, 在注解??@EnableDubbo(scanBasePackages = "com.exceedy.dubbotest.dubbotestinterface.service")?? 中加入扫描包启动后一直注册不了,只要在配置文件中配置了才能注册到注册中心
  2. 3.0.8版的dubbo只支持zookeeper3.4.x系列版本, 所以安装时要注意, 并且zookeeper3.4.x系列版本只支持jdk8, 所以jdk也要注意不能太高
    ps: 图片中用的是3.7.1版本,就是因为先安装的zookeeper, 不知道dubbo不支持,所以用成了3.7.1, 而想跑通就必须先安装zookeeper, 后面博主又换成了3.4.9, 唉,都是泪哇

    推荐阅读