1.理论概述

1.1.分布式

分布式系统是若干独立计算机的集合,这些计算机对于用户来讲就像单个系统。

由多个系统集成成一个整体,提供多个功能,组合成一个板块,用户在使用上看起来是一个服务。(比如淘宝网)。

起源

分布式系统出现的原因是:用多个廉价的、普通的机器完成单个计算机无法完成的计算、存储任务

分布式使用

只有单个节点处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(内存、磁盘、CPU)高昂得不偿失的时候,应用程序也不能进一步优化的时候,才考虑分布式。

因为分布式系统是建立在网络之上的软件系统,网络是不安全不稳定的,所以会带来单系统没有的问题,为了解决这些问题,又引入更多的机制、协议,带来更多的问题。

集群与分布式区别

【集群】:多个相同的微服务,提供同一个功能

【分布式】:多个不同功能的微服务,提供不同的功能

1.2.RPC

Remote Procedure Call 远程过程调用

远程调用另外一台机器上的方法,RPC只是一种理论,不是协议。

1.3.Dubbo

概念

Dubbo是一个高性能、轻量级、开源的Java RPC框架。

提供三大核心能力:面向接口的远程方法调用、智能容错和负载均衡、服务自动注册与发现。

执行流程

调用关系说明:

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

2.Linux下安装zookeeper和dubbo-admin

软件说明

zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 (==类似于Eureka==)。

dubbo-admin是管理控制台,可以实现服务监控 (即查看注册中心情况),不安装也是可以的。

2.1.下载并安装zookeeper

①到zookeeper官网镜像:https://mirror.bit.edu.cn/apache/zookeeper/,下载zookeeper

注意3.5.x版本以上需要下载:

apache-zookeeper-3.5.9-bin.tar.gz 15-Jan-2021 03:46  9.2M  
tar.gz是源码包,执行启动无法运行

②下载完毕后通过Xftp发送到Linux服务器上的home目录下(目录可根据个人喜好),解压并进入conf目录下复制配置文件;

cp zoo.zoo_sample.cfg zoo.cfg

③需要同步修改zoo.cfg文件:

④返回上一层目录并进入bin子目录,执行命令:./zkServer.sh start启动zookeeper

操作zookeeper其余命令:

./zkServer.sh stop
./zkServer.sh restart
./zkServer.sh status

启动zookeeper过程中可能由于远端Linux云服务器防火墙未关闭报:java.net.NoRouteToHostException: No route to host dubbo-admin,

需要关闭防火墙:解决方法

2.2.下载安装dubbo-admin

①下载dubbo-admin并修改配置:

进入GitHub下载:https://github.com/apache/dubbo-admin/tree/master

解压并修改application.properties文件,配置文件在dubbo-admin\src\main\resources目录下

②打包dubbo-admin项目,将dubbo-admin项目编译打成jar包:

在项目目录下执行cmd命令:

打包:

输入命令:mvn clean package -Dmaven.test.skip=true

将项目target目录下生成的jar上传到Linux系统并执行java -jar dubbo-admin-0.0.1-SNAPSHOT.jar &命令,开放7001端口,在浏览器便可访问。

初始登录账户和密码都是root

3.SpringBoot整合Dubbo+Zookeeper

3.1.创建服务提供者provider

①先创建一个空项目,在空项目下以SpringBoot为基础创建一个子模块。

②导入dubbo、zookeeper相关依赖包:

   <!-- 导入依赖 Dubbo + Zookeeper -->
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- 日志冲突 -->
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<!--zookeeper的版本与自己安装的保持一致-->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.9</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>

application.properties配置:

server.port=8001

#服务应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://139.155.203.191:2181
#哪些包下面的服务需要被注册
dubbo.scan.base-packages=com.fengye.service

或yml格式:

server:
port: 8080
dubbo:
# 服务应用名字
application:
name: provider-server
# 注册中心地址(zookeeper地址)
registry:
address: zookeeper://ip:2181
# 哪些服务要被注册
scan:
base-packages: com.fengye.service

③创建接口并实现接口提供服务(模拟售票):

//接口
public interface TicketService {
public String buyTicket();
} @Component //使用dubbo后尽量不要使用Service注解
@Service //标识可以被dubbo扫描到,项目启动后就注册到注册中心
public class TicketServiceImpl implements TicketService {
@Override
public String buyTicket() {
return "成功购票一张";
}
}

④启动此服务,便可以在dubbo-admin中发现服务:

3.2.创建服务消费者consumer

①第一步、第二步与provider模块创建、导入依赖坐标相同;

配置application.properties:

server.port=8002
#消费者去哪里取服务需要暴露自己的名称
dubbo.application.name=consumer-service
#配置注册中心的地址
dubbo.registry.address=zookeeper://139.155.203.191:2181

②创建消费者接口(必须和服务提供者接口方法名一样,表示引用远端、执行方法调用):

public interface TicketService {
//定义和远端服务提供者provider相同的接口名称
public String buyTicket();
}

③创建消费者UserServie:

@Service
public class UserService {
//在消费者中使用dubbo订阅远程服务:使用dubbo提供的@Refence注解
@Reference
private TicketService ticketService; public void getTicket(){
String ticket = ticketService.buyTicket();
System.out.println("从注册中心拿到:" + ticket);
}
}

④启动消费者服务,可以看到服务在dubbo-admin中已经注册:

3.3.测试消费者远程调用服务者拿数据

①在消费者方本地创建测试方法,执行方法:

@SpringBootTest
class ConsumerServerApplicationTests { @Autowired
private UserService userService;
@Test
void contextLoads() {
//获取售票数据
userService.getTicket();
} }

成功调用可以看到远端服务提供者方法已被调用:

本博客写作参考文档相关:

https://dubbo.apache.org/zh/docs/v2.7/user/preface/architecture/

https://www.kuangstudy.com/bbs/1355164021359243266

https://www.kuangstudy.com/bbs/1371400397700218882

示例代码已上传至Github地址:

https://github.com/devyf/SpringBoot_Study/springboot_dubbo_zk

【java框架】SpringBoot(5)--SpringBoot整合分布式Dubbo+Zookeeper的更多相关文章

  1. SpringBoot分布式 - Dubbo+ZooKeeper

    一:介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. Dubbo是Alib ...

  2. springboot和quartz整合分布式多节点

    虽然单个Quartz实例能给予我们很好的任务job调度能力,但它不能满足典型的企业需求,如可伸缩性.高可靠性满足.假如你需要故障转移的能力并能运行日益增多的 Job,Quartz集群势必成为你应用的一 ...

  3. java框架篇---spring hibernate整合

    在会使用hibernate 和spring框架后 两个框架的整合就变的相当容易了, 为什么要整合Hibernate?1.使用Spring的IOC功能管理SessionFactory对象 LocalSe ...

  4. java框架之SpringCloud(7)-Config分布式配置中心

    前言 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中标会出现大量的服务.由于每个服务都需要必要的配置信息才能运行,所以一套集中式的.动 ...

  5. JAVA框架 Spring 和Mybatis整合(动态代理)

    一.使用传统方式的dao的书写方式,不建议.目前采用的是动态代理的方式交给mybatis进行处理. 首先回顾下动态代理要求: 1)子配置文件的中,namespace需要是接口的全路径,id是接口的方法 ...

  6. JAVA框架 Spring 和Mybatis整合(传统dao)

    一:我们使用spring处理service,mybaits处理dao层. 二:导入jar包 pom.xml文件内容: <?xml version="1.0" encoding ...

  7. java框架之SpringBoot(16)-分布式及整合Dubbo

    前言 分布式应用 在分布式系统中,国内常用 Zookeeper + Dubbo 组合,而 SpringBoot 推荐使用 Spring 提供的分布式一站式解决方案 Spring + SpringBoo ...

  8. Spring-boot:5分钟整合Dubbo构建分布式服务

    概述: Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常 ...

  9. Redis-基本概念、java操作redis、springboot整合redis,分布式缓存,分布式session管理等

    NoSQL的引言 Redis数据库相关指令 Redis持久化相关机制 SpringBoot操作Redis Redis分布式缓存实现 Resis中主从复制架构和哨兵机制 Redis集群搭建 Redis实 ...

随机推荐

  1. yarn & macOS & upgrade

    yarn & macOS https://yarnpkg.com/zh-Hans/docs/install#mac-stable $ brew install yarn $ brew upgr ...

  2. css & circle & shapes

    css & circle & shapes css-tricks circle https://css-tricks.com/the-shapes-of-css/ https://cs ...

  3. babel 常用操作

    astexplorer babel-types code to ast const { parse } = babel; const code = ` for (let k in ${data}) { ...

  4. Word带数学公式发布博客

    Word公式编辑器无法直接上传博客,一个一个的转换LaTeX还要加$,十分麻烦. 下面是我昨天摸索出来的办法.作为博客新人,这个问题困扰我一晚上,能解决我也是非常高兴的. 如果各位前辈有好方法的话,请 ...

  5. AttributeError: 'function' object has no attribute 'as_view'

    我的描述:当我启用jwt_required来进行token验证的时候,我提示错误; 解决方案: 修改前代码: 修改后代码: 多看书.多多了解.多看看世界...

  6. 鸿蒙的js开发部模式16:鸿蒙布局Grid网格布局的应用一

    鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口]目录:1.Grid简介2.使用Grid布局实现的效果3.grid-row-gap和grid-colunm-gap属性4.< ...

  7. 用友U8+V12.0安装教程(有需要软件和服务的可以联系我)

    有需要用友U8+V12.0软件和服务的可以联系我 QQ:751824677  1.退出所有杀毒软件 2.先装服务器SQL2008 3.服务器(会计): 经典应用模式--全产品 (解压A盘-执行-Aut ...

  8. 【Notes_9】现代图形学入门——光线追踪(基本原理)

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 目录 光线追踪 为什么要光线追踪 soft shadow ...

  9. RabbitMQ(二) Java使用RabbitMQ

    2-1 RabbitMQ 生产者消息发送 创建 Maven 项目 Send 加入依赖 <dependency> <groupId>com.rabbitmq</groupI ...

  10. c++指针类型的函数

    下面随笔将讲述c++指针类型的函数. 原创链接:https://www.cnblogs.com/iFrank/p/14444379.html 指针类型的函数 若函数的返回值是指针,该函数就是指针类型的 ...