Dubbo和Zookeeper

Window下安装zookeeper

注册中心

  1. 下载zookeeper,官网地址:https://zookeeper.apache.org/

    我选择下载的是apache-zookeeper-3.5.9-bin.tar.gz

    步骤:

    image-20220315194515823

    image-20220315194632309

    image-20220315194745795

    image-20220315194814807

    image-20220315194858973

    image-20220315194926451

  2. 打开下载的文件(管理员模式打开),运行/bin/zkServer.cmd,初次运行时可能会报错,因为没有zoo.cfg

    也有可能遇到闪退的问题!

    闪退的解决方案:右键编辑zkServer.cmd文件,在末尾添加pauser(如果右键不能点击编辑,可以将文件的后缀名改为txt,然后修改完后再改回cmd)

    image-20220315195317861

  3. 修改zoo.cfg配置文件

    将conf文件夹下面的zoo_sample.cfg复制一份改名为zoo.cfg即可。

    注意几个重要位置:

    dataDir=./ 临时数据存储的目录(可写相对路径)

    clientPort=2181 zookeeper的端口号

    修改完成后再次启动zookeeper

  4. 打开zkCli.cmd进行测试(在打开zkCli.cmd前,要先将zkServer.cmd打开)

    ls /:列出zookeeper根下保存的所有节点

    create –e /lzj123:创建一个lzj节点,值为123

    get /lzj:获取/lzj节点的值

Window下安装Dubbo-admin

注意:dubbo-admin可能会使用20880端口,所以在编写生产者的时候要修改生产者的dubbo的端口号

是一个监控管理后台,查看我们注册了哪些服务,哪些服务被消费了

dubbo本身并不是一个服务软件。它其实就是一个jar包,能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。

但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,不过这个监控即使不装也不影响使用。

安装步骤:

  1. 下载dubbo-admin

    https://github.com/apache/dubbo-admin

    左侧选择master后在code中下载zip

    image-20220315201441763

  2. 进入解压后的目录,进入\dubbo-admin-server\src\main\resources

    该目录下有一个application.properties,双击打开该文件

    由于dubbo-admin后台服务端口默认为8080,可能会与tomcat的端口产生冲突,所以我们需要在application.properties中修改默认端口

    修改方法:在文件末尾加入server.port=7001,即将其默认端口修改为7001

    其它需要修改的可以参考如下:(我的话是只修改了端口号就可以了

    server.port=7001
    spring.velocity.cache=false
    spring.velocity.charset=UTF-8
    spring.velocity.layout-url=/templates/default.vm
    spring.messages.fallback-to-system-locale=false
    spring.messages.basename=i18n/message
    spring.root.password=root
    spring.guest.password=guest
    
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    
  3. 项目目录下cmd中打包dubbo-admin(第一次打包过程可能有点慢)

    mvn clean package -Dmaven.test.skip=true
    

    image-20220315201811796

  4. 打包完成后,会生成如图的jar包,可能不是这个名字

    image-20220315204659543

  5. 进入\dubbo-admin-distribution\target\下可以找到这个jar包(应该就在这个位置,如果不在这个位置,可以去其它文件夹的target目录下找一找)

    image-20220315204751378

  6. 执行 \dubbo-admin-distribution\target\ 下的dubbo-admin-0.3.0.jar(前提:zookeeper的服务一定要打开,即运行zkServer.cmd

    打开cmd在该路径下运行:

    java -jar dubbo-admin-0.3.0.jar
    
  7. 执行完毕,我们去访问一下http://localhost:7001/,这时候我们需要输入登录账户和密码,我们都是默认的root,如果需要修改的话,可以在第二步的properties中修改,然后重新打包

    image-20220315205325079

SpringBoot + Dubbo + zookeeper

框架搭建
  1. 创建一个springboot项目,项目名:provider-server,选择web依赖即可

  2. 在项目中编写一个服务

    创建一个service包

    编写接口

    public interface TicketService {
        public String getTicket();
    }
    

    编写实现类

    @Service//可以被扫描到,在项目启动就自动注册到注册中心,一定要注意,这个是dubbo包里的
    @Component//这里不使用@Service是为了方便区分dubbo和spring包下的@Service
    public class TicketServiceImpl implements TicketService{
        @Override
        public String getTicket() {
            return "LZJ学习java";
        }
    }
    
  3. 再创建一个模块,实现服务消费者,模块名:consumer-server

  4. 在consumer-server项目下写一个需要获得的服务

    public class UserService {
       //我们需要去拿去注册中心的服务
    }
    

需求:现在我们的用户想使用买票的服务,这要怎么弄呢 ?

服务提供者

编写provider-server项目

  1. 服务提供者注册到注册中心,我们需要整合Dubbo和zookeeper,所以需要导包

    <!-- dubbo -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.3</version>
    </dependency>
    <!-- zkclient -->
    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>
    <!--        日志会冲突-->
    <!-- 引入zookeeper -->
    <dependency>
        <!-- curator版本建议先用我这个,全部测试成功后再尝试升版本,否则可能报错
     	curator的版本会跟dubbo-stater依赖版本有关
    	-->
        <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>
    <dependency>
        <!-- 这个zookeeper的版本要跟你本地下载的一致 -->
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.5.9</version>
        <!--排除这个slf4j-log4j12-->
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  2. 在application.properties文件中配置属性

    dubbo-admin可能会占用dubbo默认的20880端口,所以这里我们将dubbo的端口修改为20881

    server.port=8001
    
    #dubbo.protocol.port=20881
    # 服务应用名字
    dubbo.application.name=provider-server
    # 注册中心地址
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    # 哪些服务要被注册
    dubbo.scan.base-packages=com.lzj.service
    # 修改dubbo默认端口号
    dubbo.protocol.port=20881
    
  3. 测试

    逻辑理解 :应用启动起来,dubbo就会扫描指定的包下带有@component注解的服务,将它发布在指定的注册中心中!

    **注意:**在idea中启动项目时一定要先启动zookeeper和dubbo-admin生成的jar包,如果没有启动dubbo-admin,则无法在网页上访问7001端口进入可视化界面

    显示出来你的服务则配置成功

    image-20220316091446906

服务消费者

编写consumer-server项目

  1. 导入依赖,和之前一样

    <!-- dubbo -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.3</version>
    </dependency>
    <!-- zkclient -->
    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.1</version>
    </dependency>
    <!--        日志会冲突-->
    <!-- 引入zookeeper -->
    <dependency>
        <!-- curator版本建议先用我这个,全部测试成功后再尝试升版本,否则可能报错
     	curator的版本会跟dubbo-stater依赖版本有关
    	-->
        <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>
    <dependency>
        <!-- 这个zookeeper的版本要跟你本地下载的一致 -->
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.5.9</version>
        <!--排除这个slf4j-log4j12-->
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  2. 编写application.properties

    server.port=8002
    
    # 消费者去哪里拿服务需要暴露自己的名字
    dubbo.application.name=consumer-server
    # 注册中心的地址
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    
  3. 本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同

    image-20220316092008951

  4. 完善消费者的服务类

    @Service//放到容器中
    public class UserService {
    
        //想拿到provider-server中的票
        @Reference//引用,     Pom坐标,可以定义路径相同的接口
        TicketService ticketService;
        public void buyTicket(){
            String ticket = ticketService.getTicket();
            System.out.println("在注册中心拿到=>"+ticket);
        }
    }
    
  5. 编写测试类

    @SpringBootTest
    class ConsumerServerApplicationTests {
    
        @Autowired
        UserService userService;
    
        @Test
        void contextLoads() {
            userService.buyTicket();
        }
    
    }
    
  6. 启动测试

    1. 开启zookeeper

    2. 开启dubbo-admin【可以不用做】

    3. 开启服务者(provider-server)

    4. 消费者消费测试

      image-20220316092351015

class ConsumerServerApplicationTests {

   @Autowired
   UserService userService;

   @Test
   void contextLoads() {
       userService.buyTicket();
   }

}


6. 启动测试

1. 开启zookeeper

2. 开启dubbo-admin【可以不用做】

3. 开启服务者(provider-server)

4. 消费者消费测试

   [外链图片转存中...(img-ei5TC7zc-1647410955147)]

   测试访问成功!
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐