分布式 Dubbot + Zookeeper + SpringBoot
一、分布式原理
1、什么是分布式?
分布式就是多个计算机(服务器)的集合,但是对于一个用户来说就是当个的系统。
如:淘宝的订单系统,需要经过一系列的操作才能交易成功。把其中的几个模块给拿出来交给一个服务器管理。
【注意】多只有当单个节点的处理能力无法满足业务需求时,才用分布式系统,因为它会带来很多的问题,如:引入更多的机制、协议的问题
分布式服务架构
当垂直应用(MVC)越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
二、RPC协议
1、什么时RPC?
rpc协议与http协议一样都是用来通信的。
rpc(Remote Procedure Call)也叫远程过程调用,为了解决通信问题和远程控制调用问题,在这之前先讲讲什么是本地调用
本地调用:
通俗来说就是你在一个计算机里A方法调用B方法
远程过程调用:
相对于本地调用,远程过程调用是一个计算机的A方法去调用另一个计算机的B方法。
推荐阅读文章:https://www.jianshu.com/p/2accc2840a1b
RPC基本原理
步骤解析:
RPC两个核心模块:通讯,序列化。
【序列化】为了方便传输
Dubbo+Zookeeper开发步骤:
前提:打开Zookeeper服务
【意】Apache Dubbo |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
1、两个不同的引用,一个为提供者一个为使用者
2、导入依赖
<!-- 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 -->
<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>
3、配置提供者的application与服务
配置文件:
server.port=8002
#服务应用名字
dubbo.application.name=provider-server
#注册中心地址 本机地址
dubbo.registry.address=zookeeper://192.168.43.203:2181
#哪些服务器被注册
dubbo.scan.base-packages=com.li.service
服务:
//zookeeper:服务注册与发现
@Service //可以被扫描到,在项目启动就自动注册到注册中心
@Component //因为dubbo也有个service注解,所有为了区分用Component
public class TicketServiceImpl implements TicketService {
@Override
public String getTicket() {
return "《独依栏窗》";
}
}
4、配置使用者application与服务
配置文件:
server.port=8001
#消费者去哪里拿服务,需要暴露自己的名字
dubbo.application.name=consumer-server
#注册中心的地址
dubbo.registry.address=zookeeper://192.168.43.203:2181
服务:
@Service
public class UserService {
//我们需要去拿去注册中心的服务
@Reference //引用
TicketService ticketService; //正常开发引用,pom坐标,也可以定义路径相同的接口名
public void setTicketService(){
System.out.println("在注册中心拿到"+ticketService.getTicket());
}
}
5、运行打包成jar到Dubbo-admin 查看服务信息
Those who reward are very cute.
- Post link: https://lzhbk.github.io/2020/04/24/Dubbot+Zookeeper/
- Copyright Notice: All articles in this blog are licensed under unless stating additionally.
若您想及时得到回复提醒,建议跳转 GitHub Issues 评论。
若没有本文 Issue,您可以使用 Comment 模版新建。