看B站狂神说Dubbo+ZooKeeper视频记的笔记

看完视频想着实战一下,遇到好多坑,现在好像用的也少了,查文章资料什么的也好少,详细记录下实战步骤和遇到的坑。

目录

1 简介

1.1 dubbo介绍

1.2 运行原理

1.3 使用

2 环境搭建

2.1 下载安装zookeeper

2.2 下载运行dubbo-admin

3 工程创建

4 dubbo使用总结

4.1 关键步骤

4.2 遇到的坑


1 简介

1.1 dubbo介绍

dubbo是一款高性能、轻量级开源的java rpc框架
三大核心能力:面向接口的远程方法调用、智能容错和负载均衡以及服务自动注册和发现。

1.2 运行原理

1)服务提供者Provider:暴露服务的提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
2)服务消费者Consumer:调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需要的服务,服务消费者,才能够提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
3)注册中心Registry:注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接体送变更数据给消费者。
4)监控中心Montor:服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

1.3 使用

1.只需要spring加载dubbo的配置即可(导入依赖;yml配置应用名,暴露自己的名字,配置注册中心地址,提供者配置需要暴露的服务(消费者只需要消费,不提供服务不用配置这个))
2.定义服务接口Service,在服务提供方实现接口,注解@DubboService
3.服务消费方定义与提供者路径相同的接口名,注入使用@DubboReference
dubbo:jar包
zookeeper:注册中心
dubbo-admin:是一个监控管理后台,查看我们注册了哪些服务,哪些服务被消费了

dubbo-admin本身并不是一个服务软件。它其实就是一个jar包,能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。
但是为了用户更好地管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,不过这个不安装也不影响使用

2 环境搭建

2.1 下载安装zookeeper

1)下载地址:Apache ZooKeeper,上面说3.6.3是latest stable release (最新稳定版本,新词汇get),所以我下载的3.63。

ps:下面一个带source Release的百度了下是代表还没编译过的源代码,需要自行编译,一般Linux系统用。

  2)conf文件夹下的复制zoo.sample.cfg一份,命名zoo.cfg(在这个文件我们可以看到zookeeper默认端口是2181)。然后再启动zkServer.cmd就可以了!

ps:如果直接运行/bin/zkServer.cmd,初次运行会报错,可能闪退,编辑这个cmd文件,末尾endlocal上一行添加pause,再启动就可以看到报错信息哦。报错说没有zoo.cfg什么的。所以我们再遇到闪退可以这样看一下哦!(新技能get!)

3)启动bin目录下的zkCli.cmd测试。看到Welcome to ZooKeeper!就可以了!

可以学几个命令:虽然节点这个词我也还不太懂。

ls/:列出zookeeper根下保存的所有节点。
create -e/kuangshen 123:创建一个节点
get /kuangshen:

2.2 下载运行dubbo-admin

1)从github把项目clone下来https://github.com/apache/dubbo-admin

ps:可以修改dubbo-admin\src\main\resourcs\application.properties里的dubbo.registry.address  指定zookeeper地址,配置文件已经默认是对的,我们不用改!dubbo.registry.address=zookeeper://127.0.0.1:2181

2)打包dubbo-admin,然后dubbo-admin\target下就会生成dubbo-admin-0.0.1-SNAPSHOT.jar

cmd打开命令行窗口然后

mvn clean package -Dmaven.test.skip=true

ps:下载了maven但是没有配置maven环境变量的话需要配置才可以。

  • 新建环境变量MAVEN_HOME,赋值D:\Program Files\Apache\maven(下载的maven的位置)
  • 编辑环境变量Path,追加%MAVEN_HOME%\bin\;

3)执行我们的jar包,命令:java -jar xxx.jar

java -jar D:\dubbo-admin\dubbo-admin-master\dubbo-admin\target\dubbo-admin-0.0.1-SNAPSHOT.jar

4)访问http://localhost:7001/,默认账号密码root和root,登陆进去。

 

3 工程创建

1)创建empty项目dubbo-zookeeper
2)new module  提供者:com.wcx provider-server 

  • 先导入dubbo-spring-boot-starter、zkClient、zookeeper依赖(zookeeper的依赖会日志冲突,要排除slf4j-log4j12)
  •     <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <tomcat.version>8.0.23</tomcat.version>
        </properties>
        <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.1.RELEASE</version>
        </dependency>
        <!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.7</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <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>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除这个slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-autoconfigure</artifactId>
                <version>1.5.1.RELEASE</version>
            </dependency>
        </dependencies>
  • 写个服务端的接口,模拟卖票
package com.wcx.service;

public interface TicketService {
    String getTicket();
}
package com.wcx.service;

import org.apache.dubbo.config.annotation.DubboService;

@DubboService(version = "1.0.0",timeout = 3000)
public class TicketServiceImpl implements TicketService{
    public String getTicket() {
        return "拿到票了";
    }
}
  • 创建启动类ProviderServerApplication

    @SpringBootApplication
    public class ProviderServerApplication {
        public static void main(String[] args) {
            ConfigurableEnvironment env = SpringApplication.run(ProviderServerApplication.class, args).getEnvironment();
            System.out.println(env.getProperty("dubbo.application.name")+"服务端启动完成");
        }
    }
  • resouces下创建application.yml(配置1.应用名,2.注册中心地址3.暴露的服务)
server:
  port: 8001
dubbo:
  application:
    name: provider-server #注册的应用名
  registry:
    address: zookeeper://127.0.0.1:2181 #注册中心的地址zookeeper
  scan:
    basePackages: com.wcx #要暴露的注册的服务,我们的包名
  • 启动服务,provider-server提供者服务就会自动注册到zookeeper,我们再访问dubbo-admin可以看到提供者数量是1啦。可以通过应用名搜索(我们配置的是provider-server)

3)new module 消费者:com.wcx  comsumer-server 

  • 导入依赖和provider一样
  • yml配置(配置1.应用名,2.注册中心地址):
    server:
      port: 8002
    dubbo:
      application:
        name: consumer-server #消费者去哪里拿服务器,需要暴露自己的名字
      registry:
        address: zookeeper://127.0.0.1:2181 #注册中心的地址
  • 想拿到provider-server提供的接口,需要去注册中心拿到服务,把provider的TicketService复制过来,需要定义与provider相同的路径和类名。
  • 写个controller测试调用提供者的,使用@DubboReference
    注解
    package com.wcx.controller;
    
    import com.wcx.service.TicketService;
    import org.apache.dubbo.config.annotation.DubboReference;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    @RestController
    public class UserController {
        @DubboReference(version = "1.0.0",timeout = 300)
        private TicketService ticketService;
    
        @PostMapping(value = "buyTicket")
        public String buyTicket() {
            return ticketService.getTicket();
        }
    }
    
  • 启动消费者服务,然后再访问7001,可以看到消费者数量也是1 了
  • 然后使用postman测试接口,成功返回,成功调用服务端的服务!


 

4 dubbo使用总结

4.1 关键步骤

  • 导入依赖
  • yml配置应用名,暴露自己的名字,配置注册中心地址,提供者配置需要暴露的服务(消费者只需要消费,不提供服务不用配置这个)
  • 关键注解,提供者:Service实现类使用@DubboService
  • 消费者并且定义与提供者路径相同的接口名,注入使用@DubboReference

4.2 遇到的坑

看一遍跟实际做一遍真的完全不一个感受,各种各样的坑,但是真的得动手做,看一遍感觉看了就忘了,做一遍才真的感觉掌握了。
坑1.主要是导入依赖这块,如果版本有问题就各种奇怪的问题,
springboot依赖用的2版本就不行先是启动报错,用1可以了
坑2.启动报错:WARN - Session 0x0 for server null, unexpected error, closing socket connection and attempting
百度跟tomcat版本也有冲突,需要指定tomcat版本
坑3.启动报错:Class path contains multiple SLF4J bindings.
log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment)
log4j警告:WARN Please initialize the log4j system properly
百度说是少导入依赖,那就把zookeeper里排除的slf4j依赖这块先注释。
log4j需要加log.properties文件到src,不行,再百度,说maven项目要放到resources下。
坑4.启动服务端报错:Current Spring Boot Application is await...
需要加入spring-boot-starter-web依赖
坑5.consumer正常启动了,但是没有日志,就一个spring的图案日志在那,,
百度到一个相同的情况,说要将slf4j的jar包注释,但是注释了会出现上面的slf4j错误,,
灵机一动排除了依赖,重新导入一个新的slf4j,启动成功!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 1、课程简介 Zookeeper是一个开源分布式应用程序协调服务。提供分布式数据一致性解决方案,分布式应用程序可以实现数据发布订阅、负载均衡、命名服务、集群管理分布式锁、分布式队列等功能。在大数据、分布式系统或架构中占有很重要的协调位置。 Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。 本套课程中,第一阶段深入Zookeeper原理和源码,分析Zookeeper的核心实现,并通过多个应用场景明,体现出其重要性和广泛的应用性。第二阶段深入Dubbo RPC、SPI等核心功能点,列举多个示例加以应用明,期望能够帮助学者快速提升Dobbo和Zookeeper的技术能力。 2、适应人群 有一定的Java Web基础。 3、课程亮点 系统的学习Dubbo技术栈,掌握DubboZookeeper架构原理及应用。 lZookeeper 分布式CAP原则 2PC、3PC Paxos、ZAB ZK单机&集群 快速入门 源码解析 场景应用 分布式锁、队列 1Dubbo RPC核心 RPC实现 容错&治理 IO模型&Dubbo架构 源码解析 4、主讲内容 章节一:Zookeeper 1.分布式概述 2.ZK概述 3.分布式CAP 4.一致性实现 5.ZK单机&集群搭建 6.ZK快速入门 7.ZK源码解析 8.ZK应用场景 9.分布式锁和队列 章节二:Dubbo 1.RPC核心 2.手写RPC 3.Dubbo高可用 4.Dubbo IO模型 5.Dubbo架构 6.源码解析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值