Dubbo+Zookeeper
服务注册与发现:Dubbo(发现=监控)+Zookeeper(注册)
1.引言
1.All in One
Service
数据访问
控制跳转
业务处理
2.MVC/三层架构
View 、Model、Control
3.RPC client-server
4.Dobbo-SOA(面向服务的架构)——客户端、注册中心、服务器
注册中心(key:value)--zookeeper(树形结构)
学生管理系统 192.168.1.101
图书管理系统 192.168.1.102
server:学生管理系统8881、图书管理系统8882、注册系统8883
1.所有代码在一个类/模块中编写,容易造成代码混乱,维护起来麻烦
2.在同一台计算机中编写,并发能力有限
3.使用rpc可以让一个项目部署在多个不同的计算机中,此种模式的ip+端口号乱,分散
Dubbo是一款高性能、轻量级的开源Java RPC框架。
三大核心:
1、面向接口远程调用、屏蔽远程调用底层细节
2、智能容错和负载均衡、
3、服务自动注册和发现、
dubbo-admin:是一个监控管理后台 (可以查看发布的服务)
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar 访问localhonst:7001可视化看服务接口
Provider 服务提供方
Consumer 服务消费方
Registry 注册中心
ZooKeeper(动物园管理者):hadoop hive
为什么Dubbo性能高?
dubbo采用效率最高的二进制流
网络通信:不同于HTTP七步走(3次握手,4次挥手),Dubbo采用Socket通讯机制,一步到位,提高通讯效率,可以建立长链接,直接传输数据
dubbo历史:2011年托管hithub开源,2014年停止更新,2017年SpringCloud出世
官网:dubbo.apache.org
dubbo两种方式
Registry注册中心:注册的是服务的URL地址(官方推荐zookeeper 2181,需要启动zookeeper服务)
dubbo支持的协议:dubbo,默认20880(直连,没有屏蔽底层调用细节)->可以将接口单独做成一个模块,消费者和生产者均引用即可。
2、环境搭建
rpm -ivh jdk-8.rpm(安装),会自动安装到/usr/java,通过pwd查看
window系统:解压压缩包,执行bin/zkServer.cmd,启动Zookeeper注册中心服务
实战:
一、服务方
1、导入依赖
<!--dubbo+zookeeper-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<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>
2、配置服务器application.properties
server.port=8080
#服务应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#哪些服务要被注册
dubbo.scan.base-packages=com.nercita.providerserver
3、注册服务
接口服务类
public interface TicketService {
public String getTicket();
}
接口服务类实现
@Service //可以被扫描到,在项目一启动就自动注册到注册中心
@Component //使用dubbo后尽量不用service注解
public class TicketServiceImpl implements TicketService{
@Override
public String getTicket() {
return "hello zookeeper!";
}
}
二、消费方
1、导入依赖
同上
2、配置application.properties
server.port=8081
#消费者哪里拿服务器需要暴露自己的名字
dubbo.application.name=consumer-server
#注册中心的地址 zookeeper地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
3、调用服务(注册中心拿服务)
注意:
1.同名接口赋值 -- 注意包的名字要一致
2.pom注入 @Reference
@Service
public class UserService {
/*
注册中心拿服务
1.同名接口赋值 -- 注意包的名字要一致
2.pom注入
*/
@Reference
TicketService ticketService;
public void buyTicket(){
String ticket = ticketService.getTicket();
System.out.println(ticket);
}
}