Dubbo+Zookeeper
分布式
什么是分布式?
也就是说分布式系统背后是由一系列的计算机组成的,但用户感知不到背后的逻辑,就像访问单个计算机一样。
![image-20210728223546489](C:\Users\86180\AppData\Roaming\Typora\typora-user-images\image-20210728223546489.png
随着用户量的增大,单个微机服务器以及无法满足性能要求,这个时候就会自然而然的演进到分布式。
1.什么又是RPC Remote Procedure Call:意为远程调用.
它的工作原理图 。
主要模块,序列化和通信。
Dubbo是一款轻量级的RPC框架。
简介
Apache Dubbo (incubating) 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和
-
面向接口的远程方法调用
-
智能容错和
-
服务自动注册和发现
原理:
-
服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
-
服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
-
注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
-
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
Zookeeper
顾名思义 zookeeper 就是动物园管理员,他是用来管 hadoop(大象)、Hive(蜜蜂)、pig(小 猪)的管理员, Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper: 是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目。他提供的主要功 能包括:配置管理、名字服务、分布式锁、集群管理。
1.1 配置管理
1.2 名字服务
1.3 分布式锁
1.4 集群管理
简而言之,我们需要zookeeper提供数据的传输。
实例
1.下载zookeeper文件
https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
2.找到zookeeper解压文件下的bin目录,windows运行这个两个文件开启服务端和客户端
3.下载Dubbo 下载地址:https://github.com/apache/dubbo
然后使用命令:mvn clean package Dmaven.test.skip=true 打包下载下来的解压文件
然后找到target下的jar包
运行它
现在前置工作就做好了,接下来我们使用idea来实现一下。
1.首先创建两个项目
2.编写提供者
2.1导入pom依赖
<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.2编写配置文件
//自定义提供者的名字
dubbo.application.name=BuyFoodService
//注册中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
//需要扫描并注册到注册中心的包
dubbo.scan.base-packages=cn.com.providerserver.provider
server.port=8081
2.3接口类BuyFood
package cn.com.providerserver.provider;
?
public interface ProvederService {
public String BuyFood();
}
2.4实现接口类
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
访问localhost:7001 账号root 密码root
2.5客户
server.port=8082
//注册到注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
//他的名字
dubbo.application.name=custemer
2.6引用远程注解
测试