分布式:Dubbo+Zookeeper

Dubbo+Zookeeper

分布式

什么是分布式?

也就是说分布式系统背后是由一系列的计算机组成的,但用户感知不到背后的逻辑,就像访问单个计算机一样。

分布式:Dubbo+Zookeeper

![image-20210728223546489](C:\Users\86180\AppData\Roaming\Typora\typora-user-images\image-20210728223546489.png

分布式:Dubbo+Zookeeper

随着用户量的增大,单个微机服务器以及无法满足性能要求,这个时候就会自然而然的演进到分布式。

1.什么又是RPC Remote Procedure Call:意为远程调用.

它的工作原理图

分布式:Dubbo+Zookeeper

主要模块,序列化和通信。

分布式:Dubbo+Zookeeper

Dubbo是一款轻量级的RPC框架。

简介

Apache Dubbo (incubating) 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。官网:http://dubbo.apache.org/

  1. 面向接口的远程方法调用

  2. 智能容错和负载均衡

  3. 服务自动注册和发现

原理:

分布式:Dubbo+Zookeeper

  • 服务提供者(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运行这个两个文件开启服务端和客户端

分布式:Dubbo+Zookeeper

3.下载Dubbo 下载地址:https://github.com/apache/dubbo

然后使用命令:mvn clean package Dmaven.test.skip=true 打包下载下来的解压文件

分布式:Dubbo+Zookeeper

然后找到target下的jar包

分布式:Dubbo+Zookeeper

运行它

现在前置工作就做好了,接下来我们使用idea来实现一下。

1.首先创建两个项目

分布式:Dubbo+Zookeeper

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;
@Service//发布服务 注意,这里使用的是dubbo的Service注解,而不是spring的
@Component//注入到ioc容器
public class ProvederServiceImpl implements ProvederService{
   @Override
   public String BuyFood() {
       return "十串炸洋芋";
  }
}

访问localhost:7001 账号root 密码root

分布式:Dubbo+Zookeeper

2.5客户

server.port=8082
//注册到注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
//他的名字
dubbo.application.name=custemer

2.6引用远程注解

@Service//普通的Service并非Dubbo的Service注解
public class BuyFood {
   @Reference//远程引用注解
   ProvederService provederService;
   public String cust(){
       return "我买到了"+provederService.BuyFood();
  }
}
?

测试

@SpringBootTest
class CustomerApplicationTests {
   @Autowired
   BuyFood buyFood;
   @Test
   void contextLoads() {
       System.out.println(buyFood.cust());
  }
?
}
?

分布式:Dubbo+Zookeeper

分布式:Dubbo+Zookeeper

上一篇:计算机网络常见面试题(第十弹)


下一篇:vue中的props问题