dubbo官方文档_狂神说SpringBoot17:Dubbo和Zookeeper集成

狂神说SpringBoot系列连载课程,通俗易懂,基于SpringBoot2.2.5版本,欢迎各位狂粉转发关注学习。未经作者授权,禁止转载

c8e8e8a455d3746c960fc6a24254b485.gif

分布式理论

什么是分布式系统?

在《分布式系统原理与范型》一书中有如下定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”;

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据

分布式系统(distributed system)是建立在网络之上的软件系统。

首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。。。

Dubbo文档

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,急需一个治理系统确保架构有条不紊的演进。

在Dubbo的官网文档有这样一张图

4d3aa632cfd6a4be35e327043409199c.png

单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

2782f0adb4eb50db8bc2ff0de6a21d8b.png

适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。

缺点:

1、性能扩展比较难

2、协同开发问题

3、不利于升级维护

垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

c5f9e66d29f31e4783ff5a1fb88d4bea.png

通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更方便,更有针对性。

缺点:公用模块无法重复利用,开发性的浪费

分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

24a75f4a79cc2873cb5c3b5e224f419c.png

流动计算架构

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)[ Service Oriented Architecture]是关键。

2f04bd82deff6d189c63ed0754d76939.png

什么是RPC

RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。为什么要用RPC呢?就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如不同的系统间的通讯,甚至不同的组织间的通讯,由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用。RPC就是要像调用本地的函数一样去调远程函数;

推荐阅读文章:https://www.jianshu.com/p/2accc2840a1b

RPC基本原理

5aea09dd3cb33b6a88f7cd6ec5db42e0.png

步骤解析:

97867216ef0b70f3d8468f8495aecc40.png

RPC两个核心模块:通讯,序列化。

测试环境搭建

Dubbo

Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

dubbo官网 http://dubbo.apache.org/zh-cn/index.html

1.了解Dubbo的特性

2.查看官方文档

dubbo基本概念

32d65af4c8ed66da4840b2389be37f48.png

服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。

服务消费者(Consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者

监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

调用关系说明

l 服务容器负责启动,加载,运行服务提供者。

l 服务提供者在启动时,向注册中心注册自己提供的服务。

l 服务消费者在启动时,向注册中心订阅自己所需的服务。

l 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

l 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

l 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo环境搭建

点进dubbo官方文档,推荐我们使用Zookeeper 注册中心

什么是zookeeper呢?可以查看官方文档

Window下安装zookeeper

1、下载zookeeper :地址, 我们下载3.4.14 , 最新版!解压zookeeper

2、运行/bin/zkServer.cmd ,初次运行会报错,没有zoo.cfg配置文件;

可能遇到问题:闪退 !

解决方案:编辑zkServer.cmd文件末尾添加pause 。这样运行出错就不会退出,会提示错误信息,方便找到原因。

8e7abaebfb405eb8be46daea3ad85fa8.png

0ac61858d2bbee2aaac982cd0365b64d.png

3、修改zoo.cfg配置文件

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

注意几个重要位置:

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

clientPort=2181   zookeeper的端口号

修改完成后再次启动zookeeper

15852f09e7b40903a69f75ef35393d31.png

4、使用zkCli.cmd测试

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

[zk: 127.0.0.1:2181(CONNECTED) 4] ls /[zookeeper]

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

77643d22b607ab2688a986cc320b2bbc.png

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

ccca7bf2cb8561ca54fdb4fcd3125269.png

我们再来查看一下节点

ee282d1fb44005b1afb2ffc94528d7af.png

window下安装dubbo-admin

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

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

我们这里来安装一下:

1、下载dubbo-admin

地址 :https://github.com/apache/dubbo-admin/tree/master

2、解压进入目录

修改 dubbo-admin\src\main\resources \application.properties 指定zookeeper地址

server.port=7001spring.velocity.cache=falsespring.velocity.charset=UTF-8spring.velocity.layout-url=/templates/default.vmspring.messages.fallback-to-system-locale=falsespring.messages.basename=i18n/messagespring.root.password=rootspring.guest.password=guestdubbo.registry.address=zookeeper://127.0.0.1:2181

3、在项目目录下打包dubbo-admin

mvn clean package -Dmaven.test.skip=true 

第一次打包的过程有点慢,需要耐心等待!直到成功!

13cf6858937428953f5e4fb446d80735.png

4、执行 dubbo-admin\target 下的dubbo-admin-0.0.1-SNAPSHOT.jar

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

【注意:zookeeper的服务一定要打开!】

执行完毕,我们去访问一下 http://localhost:7001/ , 这时候我们需要输入登录账户和密码,我们都是默认的root-root;

登录成功后,查看界面

931287ed5d81e20f310d6a624f6d8838.png

安装完成!

SpringBoot + Dubbo + zookeeper

框架搭建

1. 启动zookeeper !

2. IDEA创建一个空项目;

3.创建一个模块,实现服务提供者:provider-server , 选择web依赖即可

4.项目创建完毕,我们写一个服务,比如卖票的服务;

编写接口

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

编写实现类

package com.kuang.provider.service;public class TicketServiceImpl implements TicketService {    @Override    public String getTicket() {        return "《狂神说Java》";    }}

5.创建一个模块,实现服务消费者:consumer-server , 选择web依赖即可

6.项目创建完毕,我们写一个服务,比如用户的服务;

编写service

package com.kuang.consumer.service;public class UserService {    //我们需要去拿去注册中心的服务}

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

服务提供者

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

我们从dubbo官网进入github,看下方的帮助文档,找到dubbo-springboot,找到依赖包

<dependency>    <groupId>org.apache.dubbogroupId>    <artifactId>dubbo-spring-boot-starterartifactId>    <version>2.7.3version>dependency>    

zookeeper的包我们去maven仓库下载,zkclient;

<dependency>    <groupId>com.github.sgroschupfgroupId>    <artifactId>zkclientartifactId>    <version>0.1version>dependency>

【新版的坑】zookeeper及其依赖包,解决日志冲突,还需要剔除日志依赖;

<dependency>    <groupId>org.apache.curatorgroupId>    <artifactId>curator-frameworkartifactId>    <version>2.12.0version>dependency><dependency>    <groupId>org.apache.curatorgroupId>    <artifactId>curator-recipesartifactId>    <version>2.12.0version>dependency><dependency>    <groupId>org.apache.zookeepergroupId>    <artifactId>zookeeperartifactId>    <version>3.4.14version>        <exclusions>        <exclusion>            <groupId>org.slf4jgroupId>            <artifactId>slf4j-log4j12artifactId>        exclusion>    exclusions>dependency>

2、在springboot配置文件中配置dubbo相关属性!

#当前应用名字dubbo.application.name=provider-server#注册中心地址dubbo.registry.address=zookeeper://127.0.0.1:2181#扫描指定包下服务dubbo.scan.base-packages=com.kuang.provider.service

3、在service的实现类中配置服务注解,发布服务!注意导包问题

import org.apache.dubbo.config.annotation.Service;import org.springframework.stereotype.Component;@Service //将服务发布出去@Component //放在容器中public class TicketServiceImpl implements TicketService {    @Override    public String getTicket() {        return "《狂神说Java》";    }}

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

服务消费者

1、导入依赖,和之前的依赖一样;

<dependency>    <groupId>org.apache.dubbogroupId>    <artifactId>dubbo-spring-boot-starterartifactId>    <version>2.7.3version>dependency><dependency>    <groupId>com.github.sgroschupfgroupId>    <artifactId>zkclientartifactId>    <version>0.1version>dependency><dependency>    <groupId>org.apache.curatorgroupId>    <artifactId>curator-frameworkartifactId>    <version>2.12.0version>dependency><dependency>    <groupId>org.apache.curatorgroupId>    <artifactId>curator-recipesartifactId>    <version>2.12.0version>dependency><dependency>    <groupId>org.apache.zookeepergroupId>    <artifactId>zookeeperartifactId>    <version>3.4.14version>        <exclusions>        <exclusion>            <groupId>org.slf4jgroupId>            <artifactId>slf4j-log4j12artifactId>        exclusion>    exclusions>dependency>

2、配置参数

#当前应用名字dubbo.application.name=consumer-server#注册中心地址dubbo.registry.address=zookeeper://127.0.0.1:2181

3. 本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同;

49693c9c9f036ec459ed086c477a861a.png

4. 完善消费者的服务类

package com.kuang.consumer.service;import com.kuang.provider.service.TicketService;import org.apache.dubbo.config.annotation.Reference;import org.springframework.stereotype.Service;@Service //注入到容器中public class UserService {    @Reference //远程引用指定的服务,他会按照全类名进行匹配,看谁给注册中心注册了这个全类名    TicketService ticketService;    public void bugTicket(){        String ticket = ticketService.getTicket();        System.out.println("在注册中心买到"+ticket);    }}

5. 测试类编写;

@RunWith(SpringRunner.class)@SpringBootTestpublic class ConsumerServerApplicationTests {    @Autowired    UserService userService;    @Test    public void contextLoads() {        userService.bugTicket();    }}

启动测试

1. 开启zookeeper

2. 打开dubbo-admin实现监控【可以不用做】

3. 开启服务者

4. 消费者消费测试,结果:

e2ed13b37d37bd9debdb1698abd9f691.png

监控中心 :

a73f259d5a5faa6d9cf196cd40043070.png

ok , 这就是SpingBoot + dubbo + zookeeper实现分布式开发的应用,其实就是一个服务拆分的思想;

14c0f989e2c990562fb238b715e98f51.png

end

1594588d31aeb13df89c95d674e17286.png

视频同步更新,这次一定!

1ab1ccd6eb1cc27680815898ebcabe56.png

caff02508f690135622c70e5816b03e8.png

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

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

相关文章

第一个脚本-HelloWorld

目录 前言 脚本的作用 创建脚本 开始编写我们这次的HelloWorld的对话框 前言 我的扩展主要使用:Tampermonkey&#xff0c;当然其他的有类似功能的也可以&#xff0c;我们就将这些统称为油猴吧。 本节主要内容: 描述脚本的作用和油猴,脚本的基本结构,创建一个脚本,使它能够…

bme280 环境传感器开发板_STM32Cube14 | 使用硬件I2C读写环境光强度传感器

更多精彩~点击上面蓝字关注我们呀&#xff01; 寻求更好的阅读体验&#xff0c;请点击阅读原文移步&#xff1a;Mculover666的个人博客。本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设读取环境光强度传感器数据(BH1750)。1. 准备工作硬件准备开发板首先…

平稳序列的拟合和预测之序列的预测

目录 1.线性预测函数 2.预测方差最小原则 3.线性最小方差预测的性质 AR(p)序列的预测 例题 R语言预测举例 MA(q)序列的预测 例题 ARMA(p,q)序列预测 例题 小结 序列只有为非白噪声时才可以进行预测哦&#xff01;&#xff01; 1.线性预测函数 根据平稳性和可逆性&…

vue 浏览器调试 样式如何定位样式_浏览器断点调试-程序员的必修课

一、源码调试/debugger方法1.1控制台调试按钮介绍Resume script execution恢复断点调试、常用在一个方法调用多个js文件(适用冗长js代码使用)、点击这个会直接跳转到下一个断点(逐过程执行)Pause script execution停止断点调试step over next function call逐语句执行&#xff…

https open api_Web上的分享(Share)API

我认为Web Share API非常酷&#xff0c;简而言之&#xff0c;它会利用您所使用的平台上的原生共享功能(如果该平台支持的话)。我喜欢这个&#xff1a;远远不止这些东西&#xff1a;为什么&#xff1f;Web Share API只是几行代码。简单&#xff01;没有图像&#xff0c;没有重量…

无季节效应的非平稳序列分析(一)

目录 Cramer分解定理&#xff08;1961年提出&#xff09; 差分 R语言函数 diff 例题&#xff1a; 过差分&#xff1a; 小结 Cramer分解定理&#xff08;1961年提出&#xff09; 任何一个时间序列 都可以分解为两部分的叠加:其中一部分是由多项式决定的确定性趋势成分&a…

求一个任意实数c的算术平方根g的算法设计思想_算法复习第四篇——贪心法

公元2020年5月5日&#xff0c;距离算法考试仅剩4天。一、知识归纳1.设计思想只根据当前已有的信息就做出选择&#xff0c;而且一旦做出了选择&#xff0c;将来无论如何都不能更改不从整体最优考虑&#xff0c;所做的选择只是在某种意义上的局部最优这种选择并不总能获得整体最优…

安装百分之80卡住_关注丨男子翻越高铁站台丢命,家属向铁路部门索赔80万!法院这样判...

去年3月&#xff0c;一名男子翻越高铁站台被卡住致死引发广泛关注。事发后&#xff0c;其家属将铁路部门告上法庭&#xff0c;索赔80余万元。日前&#xff0c;法院宣判&#xff1a;死者杨某擅自闯入危险区域负全责&#xff0c;其父母要求铁路部门赔偿的诉请被驳回。事件还原201…

ARIMA模型的介绍

目录 ARIMA模型结构 随机游走模型(random walk) 举例&#xff1a; ARIMA模型的性质 小结 ARIMA模型结构 使用场合&#xff1a;差分平稳序列拟合 模型结构 则有&#xff1a; 随机游走模型(random walk) 模型结构&#xff1a; Karl Pearson(1905)在《自然》杂志上提问:假…

java斗地主游戏

使用java实现斗地主小游戏。 程序分析&#xff1a; 1、创建扑克牌的实体类Poker&#xff0c;设置四个参数&#xff1a;花色、数字、牌值&#xff08;判断大小&#xff09;、是否地主牌&#xff0c;实现getset方法和构造方法&#xff1b; 2、创建玩家的实体类Player&#xff0…

为什么总是封板又打开涨停_警惕!如果股票涨停板反复打开说明了什么?

股市禁忌“三进三出”&#xff1a;“三进”为&#xff1a;一是“高位进”&#xff0c;这就是我们常说的追涨。犯有这种错误的投资者&#xff0c;喜欢在股票已经有了很大的涨幅后买进&#xff0c;其买进的依据往往是股票已经放量突破了历史高点或突破了某个高点阻力位等&#xf…

动态背景登录

前端动态背景登录 效果演示 完整代码 首先我们要导入jquery.js包 html代码 <!doctype html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge,chrome1&qu…

ARIMA模型的建模和预测

目录 基本过程&#xff1a; 1.Green 函数递推公式 2.ARIMA模型的预测 例题 小结 基本过程&#xff1a; 1.Green 函数递推公式 ARIMA模型 也可写成 确定 设 则可得Green函数递推公式 2.ARIMA模型的预测 原则&#xff1a;最小均方误差预测原理 传递形式&#xff1a; 预测…

jsp论坛网站模版_网站被降权了?看看这些解决方法,或许有帮助哦

点击标题下「蓝色微信名」可快速关注在前面的文章中&#xff0c;笔者已经给大家介绍了网站被降权的因素。那么当遇到降权的问题该怎么办呢&#xff1f;接下来&#xff0c;笔者就结合本身经历过的网站降权来给大家介绍一下补救措施。1、造成网站首页降权的原因&#xff1a;服务器…

ARIMA模型之疏系数模型

目录 1.疏系数模型的定义 2.拟合ARIMA疏系数模型函数 例题&#xff1a; 小结 1.疏系数模型的定义 ARIMA(p,d,q)模型是指d阶差分后自相关最高阶数为p&#xff0c;移动平均最高阶数为q的模型&#xff0c;通常它包含pq个独立的未知系数: 如果该模型中部分自相关系数 ,1≤j<…

动画分享菜单

制作一个动画分享的菜单 效果演示 注意&#xff1a;在我们的程序开始之前我们一定要导入jquery.js架包并且找到如图所示的矢量图标。 完整代码 html代码 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/…

java 双向链表_23张图!万字详解「链表」,从小白到大佬

链表和数组是数据类型中两个重要又常用地基础数据类型&#xff0c;数组是连续存储在内存中的数据结构&#xff0c;因此它的优势是可以通过下标迅速的找到元素的位置&#xff0c;而它的缺点则是在插入和删除元素时会导致大量元素的被迫移动&#xff0c;为了解决和平衡此问题于是…

有季节效应的非平稳序列分析之因素分解

目录 6.1 因素分解理论 6.2因素分解模型 6.2.1因素分解模型的选择 6.2.2趋势效应的提取 简单中心移动平均的良好属性 R语言中&#xff0c;使用filter函数可以做简单移动平均 6.2.3 季节效应的提取 6.2.4 X11季节调节模型 X11模型分析步骤&#xff1a; ​ 确定性…

指数平滑预测模型

目录 1.分类 2.简单指数平滑 简单指数平滑预测&#xff1a; 平滑系数的确定 R中实现&#xff1a; 3. Holt两参数指数平滑 4. Holt-Winters三参数指数平滑 5.ARIMA加法季节模型 R实现 例题&#xff1a; 1.分类 2.简单指数平滑 简单移动平均法向前预测1期&#xff1a; …

ARIMA乘法季节模型

目录 ARIMA乘法季节模型 例题1 例题 2 例题3 ARIMA乘法季节模型 序列的季节效应、长期趋势效应和随机波动之间有着复杂的相互关联性,简单的季节模型不能充分地提取其中的相关关系&#xff0c;这时常采用乘积季节模型。 例题1 我国1949-2008年年末人口总数&#xff08;单…