1.介绍

在分布式系统中,国内常用zookeeper+ dubbo组合,而Spring Boot推荐使用
全栈的Spring, Spring Boot+ Spring Cloud。

2.相关概念

zookeeper用来做注册中心(类比婚介所),dubbo用来做分布式服务的调用框架。
工作原理图:
springboot与分布式-zookeeper  dubbo - 图1

3.docker安装zookeeper

  1. docker pull zookeeper

4.启动zookeeper

  1. docker run --name zk01 -p 2181:2181 --restart always -d 56d414270ae3

5.springboot整合zookeeper和dubbo

前提:springboot版本必须是1.x

5.1提供者端

5.1.1引入相关依赖

  1. 引入dubbo的

    1. <dependency>
    2. <groupId>com.alibaba.boot</groupId>
    3. <artifactId>dubbo-spring-boot-starter</artifactId>
    4. <version>0.1.0</version>
    5. </dependency>
  2. 引入zookeeper的

    1. <!--引入zookeeper的客户端工具-->
    2. <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
    3. <dependency>
    4. <groupId>com.github.sgroschupf</groupId>
    5. <artifactId>zkclient</artifactId>
    6. <version>0.1</version>
    7. </dependency>

    5.1.2编写配置文件

    配置dubbo的扫描包和注册中心地址 ```shell

    配置应用名(当前应用)

    dubbo.application.name=provider

设置注册地址

dubbo.registry.address=zookeeper://120.78.152.93:2181

发布哪些服务(配置扫描包)

dubbo.scan.base-packages=com.jf3q.provider.service

  1. <a name="CjsGX"></a>
  2. ### 5.1.3提供者将服务发布并启动
  3. 这里测试案例是提供者发布一个获取电影票名字的服务供消费者订阅
  4. ```java
  5. import com.alibaba.dubbo.config.annotation.Service;
  6. import org.springframework.stereotype.Component;
  7. @Service
  8. @Component
  9. public class TicketServiceImp implements TicketService {
  10. @Override
  11. public String getTicket() {
  12. return "《长津湖》";
  13. }
  14. }

5.2消费者端

5.2.1引入相关依赖

  1. <dependency>
  2. <groupId>com.alibaba.boot</groupId>
  3. <artifactId>dubbo-spring-boot-starter</artifactId>
  4. <version>0.1.0</version>
  5. </dependency>
  6. <!--引入zookeeper的客户端工具-->
  7. <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
  8. <dependency>
  9. <groupId>com.github.sgroschupf</groupId>
  10. <artifactId>zkclient</artifactId>
  11. <version>0.1</version>
  12. </dependency>

5.2.2编写配置文件

  1. dubbo.application.name=consumer
  2. #设置注册地址
  3. dubbo.registry.address=zookeeper://120.78.152.93:2181

5.2.3将服务提供者的包复制进来

这里要特别注意:必须把服务提供者端暴露的包整个复制过来,而且要保证全类名相同
image.pngimage.pngimage.png

5.2.4测试

  1. import com.alibaba.dubbo.config.annotation.Reference;
  2. import com.jf3q.provider.service.TicketService;
  3. import org.springframework.stereotype.Service;
  4. @Service
  5. public class UserService {
  6. /* 远程应用注解 @Reference 按全类名匹配*/
  7. @Reference
  8. TicketService ticketService;
  9. public void hello(){
  10. String ticket=ticketService.getTicket();
  11. System.out.println("买到票:"+ticket);
  12. }
  13. }
  1. @Test
  2. public void contextLoads() {
  3. userService.hello();
  4. }

6.相关代码