# 搭建Dubbo + Zookeeper

# 搭建Zookeeper

选择docker compose搭建。创建docker-compose.yml文件。执行docker-compose up -d

version: '3.5'
services:
  zoo1:
    image: wurstmeister/zookeeper
    restart: always
    container_name: zk1
    ports:
      - 2181:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    networks:
      - dubbo-net

  zoo2:
    image: wurstmeister/zookeeper
    restart: always
    container_name: zk2
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    networks:
      - dubbo-net

  zoo3:
    image: wurstmeister/zookeeper
    restart: always
    container_name: zk3
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    networks:
      - dubbo-net

  dubbo-admin:
    image: apache/dubbo-admin
    container_name: dubbo
    ports:
      - 8089:8080
    networks:
      - dubbo-net
    environment:
      - admin.registry.address=zookeeper://zoo1:2181?backup=zoo2:2181,zoo3:2181
      - admin.config-center=zookeeper://zoo1:2181?backup=zoo2:2181,zoo3:2181
      - admin.metadata-report.address=zookeeper://zoo1:2181?backup=zoo2:2181,zoo3:2181
    depends_on:
      - zoo1
      - zoo2
      - zoo3

networks:
  dubbo-net:
    name: dubbo-net
    driver: bridge
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

# SpringBoot集成dubbo

# 导入jar包(dubbo+zk)

<!--引入dubbo-->
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.8</version>
</dependency>

<!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 提供者

1.提供者的application.yml文件

server:
  port: 8081
dubbo:
  application:
    name: provider-server #应用名称
  registry:
    address: zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182,127.0.0.1:2183 #注册地址
  scan:
    base-packages: com.warren.providerserver.service # 扫描提供包
1
2
3
4
5
6
7
8
9

2.提供接口

@DubboService //可以被扫描到,在项目一启动就自动注册到注册中心
@Component //使用了Dubbo后尽量不要用service注解
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "warre dubbo";
    }
}
1
2
3
4
5
6
7
8

# 消费者

1.消费者的application.yml文件

server:
  port: 8082

dubbo:
  application:
    name: provider-server
  registry:
    address: zookeeper://127.0.0.1:2181?backup=127.0.0.1:2182,127.0.0.1:2183
1
2
3
4
5
6
7
8

2.消费接口

//放入容器中
@Service
public class UserService {
    //想拿到提供的票

    //引入
    //引入pom坐标, 可以定义路径相同的接口
    @DubboReference
//    @Reference(version = "1.0.0")
    TicketService ticketService;
    public void buyTicket() {
        ticketService.getTicket();
        System.out.println("在注册中心");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 总结步骤

1.提供者提供服务
  1.导入依赖
  2.配置注册中心的地址,以及服务发现名,和要扫描的包
  3.在想要被注册的服务上面-增加一个注解@DubboService
2.消费者如何消费
  1.导入依赖
  2.配置注册中心的地址,配置自己服务名
  3.从远处引入-@DubboReference
1
2
3
4
5
6
7
8

# 错误

问题1

log4j:WARN Please initialize the log4j system properly.

https://stackoverflow.com/questions/6608775/please-initialize-the-log4j-system-properly-while-running-web-service

问题2

java.lang.NoClassDefFoundError: org/apache/curator/framework/CuratorFrameworkFactory 缺少curator依赖

问题3

java.lang.NoClassDefFoundError: org/apache/curator/framework/listen/StandardListenerManager org.apache.curator curator-framework 2.12.0 org.apache.curator curator-recipes 2.12.0

问题4

dubbo admin如果没有展示服务 需要重启dubbo-admin服务,很坑 提供和接口名一定要一致

# 相关资料

全量分析

评 论:

上次更新时间: 4/3/2022, 12:49:51 PM