Spring Boot学习之Dubbo+Zookeeper初识

news2024/11/17 11:37:10

文章目录

  • 一 分布式理论基础知识
    • 1.1 单一应用架构
    • 1.2 垂直应用架构
    • 1.3 分布式服务架构
    • 1.4 流动计算架构
    • 1.5 PRC[Remote Procedure Call]
  • 二 Dubbo
    • 2.1 Dubbo简介
  • 三 Dubbo环境搭建
    • 3.1 Zookeeper简介
    • 3.2 Zookeeper下载与安装
    • 3.3 解决问题
      • 3.3.1 错误一的分析和解决
      • 3.3.2 错误二的分析和解决
      • 3.3.3 错误三的分析和解决
    • 3.4 zookeeper运行测试
  • 四 安装dubbo-admin【window环境】
    • 4.1 dubbo-admin(有问题没解决)【可跳过】
    • 4.2 dubbo-admin-master-0.2.0【建议食用】
    • 4.3 测试

一 分布式理论基础知识

  • 分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统
  • 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。
  • 分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。
    • 其目的是利用更多的机器,处理更多的数据。
  • 分布式系统(distributed system)是建立在网络之上的软件系统。
    • 首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。
    • 因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。

  • 分布式服务架构的演进
    在这里插入图片描述

1.1 单一应用架构

在这里插入图片描述

  • 关键:用于简化增删改查工作量的数据访问框架(ORM)
  • 优点
    • 一个应用将所有应用功能都部署在一起,减少成本!
  • 缺点
    • 不利于维护升级
    • 性能拓展不易
    • 协同开发困难

1.2 垂直应用架构

在这里插入图片描述

  • 关键用于加速前端页面开发的Web框架(MVC)
  • 优点
    • 通过切分业务来实现各个模块独立部署,降低了维护和部署难度,方便团队管理
    • 方便性能扩展,针对性强。
  • 缺点:
    • 公用模块无法重复利用,开发性的浪费

1.3 分布式服务架构

在这里插入图片描述

1.4 流动计算架构

在这里插入图片描述

  • 关键:提高机器利用率的资源调度和治理中心(SOA)【Service Oriented Architecture】
  • 优点
    • 提高集群利用率
  • 缺点
    • 系统与服务的界限模糊的,不利于设计.
    • ESB是作为系统与系统之间桥梁,没有统一标准,种类很多,不利于维护.

1.5 PRC[Remote Procedure Call]

  • RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。
  • 它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。【即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同】
  • RPC基本原理
    在这里插入图片描述
  • 步骤解析
    在这里插入图片描述
  • RPC两个核心模块
    • 通讯
    • 序列化:数据传输需要转换

二 Dubbo

2.1 Dubbo简介

  • Dubbo官网
  • Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架
  • 它提供了三大核心能力
    • 面向接口的远程方法调用
    • 智能容错和负载均衡
    • 以及服务自动注册和发现。
  • Dubbo 基本工作流程
    在这里插入图片描述

在这里插入图片描述

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

  • 调用关系说明
    • 服务容器负责启动,加载,运行服务提供者。
    • 服务提供者在启动时,向注册中心注册自己提供的服务。
    • 服务消费者在启动时,向注册中心订阅自己所需的服务。
    • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

三 Dubbo环境搭建

3.1 Zookeeper简介

  • ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
  • ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
  • ZooKeeper包含一个简单的原语集,提供Java和C的接口。

3.2 Zookeeper下载与安装

  • Zookeeper注册中心

  • zookeeper官网

  • zookeeper3.8.0下载地址
  • 使用这个下载地址的版本,可以避免错误三的情况!

  • 在bin目录前,输入cmd以管理员运行
    在这里插入图片描述
  • 输入以下命令zkService .cmd,会出现以下问题
    在这里插入图片描述


  • 双击运行zkService.cmd闪退

3.3 解决问题

问题一:
	错误:找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
问题二:
ERROR [main:o.a.z.s.q.QuorumPeerMain@99] 
- Invalid config, exiting abnormally org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: 
Error processing C:\environment\apache-zookeeper-3.8.0-bin\apache-zookeeper-3.8.0-bin\bin\..\conf\zoo.cfg
问题三:
ZooKeeper audit is disabled

  • 编辑zkService.cmd添加pause命令,查看详细的错误信息 在这里插入图片描述
  • 双击运行zkService.cmd文件运行,出现错误信息
    C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin>call 
    "C:\Program Files\Java\jdk1.8.0_131"\bin\java 
    "-Dzookeeper.log.dir=C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\logs" 
    "-Dzookeeper.root.logger=INFO,CONSOLE" 
    "-Dzookeeper.log.file=zookeeper-HP-server-DESKTOP-OGQJ662.log" 
    "-XX:+HeapDumpOnOutOfMemoryError" 
    "-XX:OnOutOfMemoryError=cmd /c taskkill /pid %%p /t /f" -cp 
    "C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\build\classes;
    C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\build\lib\*;
    C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\*;
    C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\lib\*;
    C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\conf" 
    org.apache.zookeeper.server.quorum.QuorumPeerMain 
    "C:\environment\apache-zookeeper-3.7.1\apache-zookeeper-3.7.1\bin\..\conf\zoo.cfg"
    错误: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
    

3.3.1 错误一的分析和解决

  • 问题分析
    • 下载的是未编译的 jar 包
    • 注:zookeeper 3.5 版本以后,命名就发生了改变,如 apache-zookeeper-3.8.0.tar.gz 这般命名的,都是未编译的,而 apache-zookeeper-3.8.0-bin.tar.gz 这般命名的,才是已编译的包。

  • 解决方法
    • 重新下载 apache-zookeeper-3.8.0-bin.tar.gz 包,然后解压使用
  • 下载完运行zkService.cmd,出现以下错误
2023-01-29 17:02:21,637 [myid:] - INFO  [main:o.a.z.s.q.QuorumPeerConfig@177] 
- Reading configuration from: C:\environment\apache-zookeeper-3.8.0-bin\apache-zookeeper-3.8.0-bin\bin\..\conf\zoo.cfg
2023-01-29 17:02:21,640 [myid:] - ERROR [main:o.a.z.s.q.QuorumPeerMain@99] 
- Invalid config, exiting abnormally org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: 
Error processing C:\environment\apache-zookeeper-3.8.0-bin\apache-zookeeper-3.8.0-bin\bin\..\conf\zoo.cfg

3.3.2 错误二的分析和解决

  • 问题分析
    • 由上面的错误信息可以看到,程序没有找到conf文件夹下的zoo.cfg文件

  • 解决方法
    • zoo_saple.cfg文件复制一份,重命名为zoo.cfg
    • zoo.cfg可以看到Zookeeper默认的端口号为:2181
    # The number of milliseconds of each tick
    tickTime=2000
    # The number of ticks that the initial 
    # synchronization phase can take
    initLimit=10
    # The number of ticks that can pass between 
    # sending a request and getting an acknowledgement
    syncLimit=5
    # the directory where the snapshot is stored.
    # do not use /tmp for storage, /tmp here is just 
    # example sakes.
    dataDir=/tmp/zookeeper
    # the port at which the clients will connect
    clientPort=2181
    # the maximum number of client connections.
    # increase this if you need to handle more clients
    #maxClientCnxns=60
    #
    # Be sure to read the maintenance section of the 
    # administrator guide before turning on autopurge.
    #
    # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
    #
    # The number of snapshots to retain in dataDir
    #autopurge.snapRetainCount=3
    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    #autopurge.purgeInterval=1
    
    ## Metrics Providers
    #
    # https://prometheus.io Metrics Exporter
    #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
    #metricsProvider.httpPort=7000
    #metricsProvider.exportJvmInfo=true
    
  • 注意
    - dataDir=./ 临时数据存储的目录(可写相对路径)
    - clientPort=2181 zookeeper的端口号

3.3.3 错误三的分析和解决

  • 然后,快乐地运行zkService.cmd又又又遇到了错误!
2023-01-29 17:11:11,775 [myid:] - INFO  [main:o.a.z.a.ZKAuditProvider@42] - ZooKeeper audit is disabled.
  • 问题分析
    • zookeeper新版本启动的过程中,zookeeper新增的审核日志是默认关闭,所以控制台输出ZooKeeper audit is disabled
    • 标准的修改方式应该是在zookeeper的配置文件zoo.cfg新增一行audit.enable=true即可

  • 解决方法
    • 修改zkServer.cmd 添加"-Dzookeeper.audit.enable=true"
      在这里插入图片描述

3.4 zookeeper运行测试

  • 在解决完上面的三个问题之后,记得将zkService.cmd文件中的pause命令删除
  • 双击运行zkService.cmd服务端,在最后看到下面的信息,表明运行成功!
    [myid:] - INFO  [main:o.a.z.a.Slf4jAuditLogger@35] - user=HP    operation=serverStart       result=success
    
  • 双击运行zkCli.cmd客户端

  • 连接成功的效果
    • 服务端效果
    [myid:] - INFO  [SyncThread:0:o.a.z.s.p.FileTxnLog@285] - Creating new log file: log.1
    
    • 客户端效果
    WatchedEvent state:SyncConnected type:None path:null
    [zk: localhost:2181(CONNECTED) 0]
    

  • ls /:列出zookeeper根下保存的所有节点
    在这里插入图片描述
  • create –e /yang 123:创建一个/yang节点,值为666
    在这里插入图片描述
  • get /yang:获取/yang节点的值
    在这里插入图片描述

四 安装dubbo-admin【window环境】

4.1 dubbo-admin(有问题没解决)【可跳过】

  • dubbo-adming-github

  • 选择使用稳定版本master版本
    在这里插入图片描述

  • 遇到问题:按照提示操作即可

    • 同时注意将:压缩包的名字进行相应的修改
    • 如该错误将需要的文件node-v9.11.1-win-x64.zip下载下来,然后修改为node-9.11.1-win-x64.zip放到相应的目录下
    [INFO] Downloading https://nodejs.org/dist/v9.11.1/node-v9.11.1-win-x64.zip to 
    C:\environment\apache-maven-3.6.3\maven-repo\com\github\eirslett\node\9.11.1\node-9.11.1-win-x64.zip
    
  • 然后重新运行命令mvn clean package -Dmaven.test.skip=true进行打包!
    在这里插入图片描述

  • 生成的jar包在dubbo-admin-master\dubbo-admin-distribution\target目录下

  • 执行jar包java -jar dubbo-admin-0.5.0.jar
    在这里插入图片描述

  • 未开启Zookeeper,所以会出现错误

java.lang.IllegalStateException: java.lang.IllegalStateException: zookeeper not connected
at org.apache.dubbo.config.deploy.DefaultApplicationDeployer.prepareEnvironment(DefaultApplicationDeployer.java:678)
at org.apache.dubbo.config.deploy.DefaultApplicationDeployer.startConfigCenter(DefaultApplicationDeployer.java:261)
at org.apache.dubbo.config.deploy.DefaultApplicationDeployer.initialize(DefaultApplicationDeployer.java:185)
at org.apache.dubbo.config.deploy.DefaultModuleDeployer.prepare(DefaultModuleDeployer.java:470)
at org.apache.dubbo.config.spring.context.DubboConfigApplicationListener.initDubboConfigBeans
(DubboConfigApplicationListener.java:71)
  • 经过连接Zookeeper,发现Dubbo-admin一直出现连接后8080端口占用,立即断开连接的问题
  • 所以最终降低了dubbo的版本,操作如下
  • 如果有大佬,能够解决此问题!希望能够不吝解惑!!

4.2 dubbo-admin-master-0.2.0【建议食用】

  1. 进入dubbo-adming-github选择使用master-0.2.0版本
    在这里插入图片描述
  2. 解压后,dubbo-admin\src\main\resources \application.properties 中可指定zookeeper地址
    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
    

  1. dubbo-admin目录下,使用管理员身份运行命令mvn clean package -Dmaven.test.skip=true进行打包
    在这里插入图片描述
    • dubbo-admin-master-0.2.0\dubbo-admin\target目录下,可以看到生成的jar包

4.3 测试

  1. 首先运行Zookeeper【双击zhService.cmd】
    2.然后,打开终端进入dubbo-admin-master-0.2.0\dubbo-admin\target目录下,执行命令java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
  2. 最后,访问http://localhost:7001/
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE day8 初识HTTP

HTTP协议 HTTP协议,又称超文本传输协议,是一种应用广泛的应用层协议。所谓超文本,其实就是除了文本还能传输其他资源。而HTTP本身是基于传输层的TCP协议实现的。目前HTTP协议3版本已经在完善中。本文采用1.1版本。 它是一种请求--响应的工作…

MyBatis 持久层框架详细解读:Mapper代理开发

文章目录1. 前言2. Mapper 代理开发3. 过程剖析4. 总结1. 前言 前面在 MyBatis 快速入门篇中,我们使用了 MyBatis 原生的开发方式操作数据库,解决了 JDBC 操作数据库时的硬编码和操作繁琐的问题。实际上,在 Java 项目中,我们更常…

MVC和MVVM的区别

一、MVC mvc&#xff1a;是一种代码架构设计模式&#xff0c;前端中的mvc最主要的作用就是将视图和数据模型进行分离 &#xff08;1&#xff09; 为什么需要 MVC 简单理解&#xff1a;也就是为什么需要将视图和数据模型进行分离 <select id"drinkSelect">&…

宕机后,如何避免 Redis 的数据丢失?

前言 如果有人问你&#xff1a;"你会把 Redis 用在什么业务场景下&#xff1f;" 我想你大概率会说&#xff1a;"我会把它当作缓存使用&#xff0c;因为它把后端数据库中的数据存储在内存中&#xff0c;然后直接从内存中读取数据&#xff0c;响应速度会非常快。…

Lua 文件I/O

Lua 文件I/O 参考至菜鸟教程。 Lua I/O 库用于读取和处理文件。分为简单模式&#xff08;和C一样&#xff09;、完全模式。 简单模式&#xff08;simple model&#xff09;拥有一个当前输入文件和一个当前输出文件&#xff0c;并且提供针对这些文件相关的操作。完全模式&#…

C++Primer13.6.2节练习

练习13.49&#xff1a; StrVec类的移动构造函数和移动赋值运算符 //移动构造函数 StrVec::StrVec(StrVec&& s)noexcept :elements(s.elements), first_free(s.first_free), cap(s.cap) {//令移后源对象进入状态-----对其运行析构函数是安全的s.elements s.first_fre…

关于网络编程

Socket套接字Socket API是网络编程最核心的部分。Socket套接字是由系统提供用于网络通信的技术&#xff0c;是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。Socket API与传输层密切相关&#xff0c;由于传输层有UDP和TCP两种协议类型…

使用Idea中将单个java类打包成jar包

开工第一天&#xff0c;正在暗自爽&#xff0c;领导让帮个忙&#xff0c;给一个工具类打成jar包&#xff0c;供其他项目组使用&#xff0c;这就开始了尝试。 其实网上已经有好多人写过了&#xff0c;只是尝试了几篇&#xff0c;坑得不轻&#xff0c;自己做下笔记&#xff0c;留…

表格控件Aspose.Cells for .NET 授权须知

支持的平台 Aspose.Cells 可作为 .NET、Java、C 和 Python 的四种不同产品使用&#xff0c; .NET Framework.NET Standard 2.0Xamarin.AndroidXamarin.iOSXamarin.MacCOMMonoWindows Azure Aspose.Cells 下载&#xff08;qun&#xff1a;761297826&#xff09;https://www.ev…

python 高阶函数

传入函数 要理解“函数本身也可以作为参数传入”&#xff0c;可以从Python内建的map/reduce函数入手。 我们先看map。map()函数接收两个参数&#xff0c;一个是函数&#xff0c;一个是序列&#xff0c;map将传入的函数依次作用到序列的每个元素&#xff0c;并把结果作为新的l…

Java:基于注解的Spring使用【AOP容器】和事务管理

目录 第十五章 AOP前奏15.1 代理模式15.2 为什么需要代理【程序中】15.3 手动实现动态代理环境搭建15.4 手动实现动态代理关键步骤第十六章 Spring中AOP【重点】16.1 AspectJ框架【AOP框架】16.2 使用AspectJ步骤&#xff08;入门&#xff09;16.3 Spring中AOP概述16.4 Spring中…

AMQP 0-9-1 模型解释

官方文档链接&#xff1a;https://www.rabbitmq.com/tutorials/amqp-concepts.html 文章目录1. AMQP协议是什么2. AMQP模型2.1 工作过程2.2 深入理解3. 交换机3.1 默认交换机3.2 直连交换机3.3 扇形交换机3.4 主题交换机3.5 头交换机3.6 交换机小结4. Queue队列队列属性队列创建…

BM7 链表中环的入口结点

目录 描述 输入描述&#xff1a; 返回值描述&#xff1a; 示例1 示例2 示例3 思路&#xff1a; 代码 描述 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 例如&#xff0c;输入{1,…

DW 2023年1月Free Excel 第九次打卡 Excel数据透视

第九章 Excel数据透视 数据下载地址与参考链接&#xff1a;https://d9ty988ekq.feishu.cn/docx/Wdqld1mVroyTJmxicTTcrfXYnDd 数据透视是Excel中个强大的数据处理和分析工具&#xff0c;能够快速实现数据的汇总与统计分析&#xff0c;本节重点讲解Excel数据透视的相关操作。 1…

NSSCTF Round#7 Team ez_rce和0o0讲解

强烈建议NSSCTF延长时间&#xff0c;大过年的逛亲戚回来就剩两个小时了。。。。 ez_rce <!-- A EZ RCE IN REALWORLD _ FROM CHINA.TW --> <!-- By 探姬 --> <?PHPif(!isset($_POST["action"]) && !isset($_POST["data"]))show_s…

MySQL8中jdbc的url设置

JDBC spring.datasource.urljdbc:mysql://${MYSQL_HOST:localhost}:3306/xxxx?sslModeREQUIRED&characterEncodingUTF-8&connectionTimeZoneGMT%2B8&forceConnectionTimeZoneToSessiontruesslMode:设置为REQUIRED表示必须启用ssl加密传输&#xff1b;characterEn…

svn客户端add无法添加上子文件夹及其子文件——解决办法

1、问题描述 svn客户端add文件夹后&#xff0c;无法添加上子文件夹及其子文件&#xff0c;需要先add最外层文件夹&#xff0c;再逐层add子文件夹&#xff0c;最后add最里层子文件夹中的文件&#xff0c;很影响add速度啊。现象如下图所示&#xff1a; 正常情况下&#xff0c;add…

公派访问学者申请优势有哪些?

人的一生&#xff0c;若从职业生涯论&#xff0c;无非为官、为学、为商三条路。为官者&#xff0c;出国访学一年半载&#xff0c;对仕途并无太大作用&#xff0c;并且在此期间有可能丧失国内提拔的大好机会;为学者&#xff0c;公派访问学者是对学术水平的认可&#xff0c;并且对…

vue.js 实现导入json解析成动态el-table树表格(接口文档功能)

一、需求描述&#xff1a;前段时间接到一个需求是做一个类似接口文档的显示功能&#xff0c;将一段json数据贴到里面就可以自动解析出json数据的每个字段的类型和层级关系&#xff0c;用element组件的树表格的形式展示&#xff0c;并且可以手动新增、修改和删除某个数据字段。二…

Vue路由和路由器简介

前言 路由(route)是vue中非常重要的技术&#xff0c;几乎每一个用vue所写的项目都会用到路由&#xff0c;它是一个vue的插件库&#xff0c;专门实现SPA应用 路由(route)的简介 说到路由&#xff0c;大多数人会想到路由器(router),可以这么说&#xff0c;路由器上的每一个口都…