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

看B站狂神说Dubbo+ZooKeeper视频记的笔记,第1张

看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-adminsrcmainresourcsapplication.properties里的dubbo.registry.address  指定zookeeper地址,配置文件已经默认是对的,我们不用改!dubbo.registry.address=zookeeper://127.0.0.1:2181

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

cmd打开命令行窗口然后

mvn clean package -Dmaven.test.skip=true

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

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

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

java -jar D:dubbo-admindubbo-admin-masterdubbo-admintargetdubbo-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)

    
        UTF-8
        UTF-8
        1.8
        8.0.23
    
    
    
        org.springframework.boot
        spring-boot-starter-web
        1.5.1.RELEASE
    
    
    
        org.apache.dubbo
        dubbo-spring-boot-starter
        2.7.7
    

    
    
        com.github.sgroschupf
        zkclient
        0.1
    
    
        org.apache.curator
        curator-framework
        2.12.0
    
    
        org.apache.curator
        curator-recipes
        2.12.0
    
    
        org.apache.zookeeper
        zookeeper
        3.4.14
        
        
            
                org.slf4j
                slf4j-log4j12
            
        
    
        
            org.springframework.boot
            spring-boot-autoconfigure
            1.5.1.RELEASE
        
    
写个服务端的接口,模拟卖票
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,启动成功!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5717613.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存