一、分布式
什么是分布式系统?
若干计算机的集合,这些计算机对于用户来说像是单个的相关系统。一组计算机通过网络进行通信,为了完成共同的任务儿存在的系统。
注意:只有单个计算机无法完成任务时,才会考虑分布式。
什么是RPC(Remote Procedure Call)
远程过程调用,一种进程间的通信方式,一种技术思想,不是规范,允许程序调用另一个空间的过程或者函数。 RPC的两个核心模块:通讯、序列化 序列化:需要数据进行转换
什么是Dubbo?
微服务开源框架, 一款高性能、轻量级的开源Java RPC框架,提供了三大核心能力:面向接口的远程方法调用、智能容错、负载均衡,以及服务自动注册和发现
什么是ZooKeeper提供服务
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
二、Dubbo
1、什么是Dubbo-admin
Dubbo-admin 是一个监控管理后台,查看注册的服务,哪些服务被消费了,zookeeper是一个监控后台。
2、Dubbo安装步骤:
1>、GitHub官网下载
dubbo-admin下载地址
2>、解压文件
3>、运行
用idea导入
服务分为前端和后端两个部分,分别启动
后端:后端项目dubbo-admin-server不需要网上说的各种打成jar包运行或打成war包放在tomcat下面运行,这是一个springboot项目并且在DubboAdminApplication类中提供了main方法,可以右键直接运行
前端:npm install npm run dev
三、Zookeeper
1、Zookeeper 下载
选择适合稳定的版本,我选择的是 3.4.14,选择以 .tar.gz 结尾的文件下载。解压下载得到的压缩包,有bin,conf,lib等目录。
bin目录中存放有运行脚本; conf目录中存放有配置文件; lib目录中存放有运行所需要第三方库。
2、Zookeeper 单机配置
2.1 配置文件 在conf目录下,新建一个名为zoo.cfg的文件,其中内容如下:
# 服务器与客户端之间交互的基本时间单元(ms)
tickTime=2000
# zookeeper所能接受的客户端数量
initLimit=10
# 服务器和客户端之间请求和应答之间的时间间隔
syncLimit=5
# zookeeper中使用的基本时间单位, 毫秒值.
tickTime=2000
# 数据目录. 可以是任意目录.
dataDir=/tmp/zookeeper/data
# log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和#dataDir相同的设置.
dataLogDir=/tmp/zookeeper/log
# t监听client连接的端口号.
clientPort=2181
2.2 运行 ZooKeeper Server 进入解压目录(zookeeper-3.4.14),执行以下命令:
启动ZooKeeper
./bin/zkServer.sh start
停止ZooKeeper
./bin/zkServer.sh stop
得到如下所示结果,表示后台运行ZooKeeper Server进程成功。
zhangfandeMacBook-Pro:zookeeper-3.4.14 zhangfan$ ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /Users/zhangfan/Documents/测试/dubbo/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
zhangfandeMacBook-Pro:zookeeper-3.4.14 zhangfan$
四、SpringBoot+Dubbo+zookeeper 实战
(一)准备工作
1、启动zookeeper
2、创建idea空项目
3、创建provider-server模块
4、写一个服务:如卖票服务
5、创建consumer-server
(二)provider-server
1、将服务提供者注册到注册中心,整合dubbo和zookeeper,导包
<!-- 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>
新版的坑:zookeeper及其依赖包,解决日志冲突,还需要剔除日志依赖
<!-- 引入zookeeper -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</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; //重点,是dubbo到包
import org.springframework.stereotype.Component;
@Service //将服务发布出去
@Component //放在容器中
public class TicketServiceImpl implements TicketService {
@Override
public String getTicket() {
return "《狂神说Java》";
}
}
(三)consumer-server
- 导入依赖,和provider-server一样
- 配置参数application.properties
#当前应用名字
dubbo.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
- 本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同;
- 完善consumer-provider
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)
@SpringBootTest
public class ConsumerServerApplicationTests {
@Autowired
UserService userService;
@Test
public void contextLoads() {
userService.bugTicket();
}
}
(四)测试
-
开启zookeeper
-
打开dubbo-admin实现监控【可以不用做】
-
开启服务者
-
消费者消费测试