回顾
1,dubbo概述
dubbo是一个rpc(远程过程调用)框架。
2,入门案例(掌握)
服务提供方
@Service注解进行服务发布,注意service注解是dubbo提供。
<!--dubbo的配置-->
<!--1.配置项目的名称,唯一-->
<dubbo:application name="dubbo-service"/>
<!--2.配置注册中心的地址-->
<!--
<dubbo:registry address="zookeeper://192.168.149.135:2181"/>
协议://ip地址:端口号
-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--3.配置dubbo包扫描-->
<dubbo:annotation package="com.itheima.service.impl" />
服务消费方
进行注入的时候使用@Reference
<!--dubbo的配置-->
<!--1.配置项目的名称,唯一-->
<dubbo:application name="dubbo-web" >
<dubbo:parameter key="qos.port" value="33333"/>
</dubbo:application>
<!--2.配置注册中心的地址-->
<!-- <dubbo:registry address="zookeeper://192.168.149.135:2181"/>-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--3.配置dubbo包扫描-->
<dubbo:annotation package="com.itheima.controller" />
今日内容
- dubbo-admin
- 高级特点
- zookeeper
- 常用的命令
- JAVA api操作zookeeper
1,dubbo-admin(掌握)
2,序列化(掌握)
以后所有的实体类都需要实现序列化接口。
pojo会拆分出一个单独的工程(ssm_pojo),service工程和controller工程依赖于pojo工程。
3,超时时间设置
提供方和消费方都可以设置,建议设置在提供方
@Reference(timeout = 3000)//远程注入
private UserService userService; //使用的是动态代理的技术
@Service(timeout = 5000)
public class UserServiceImpl implements UserService {
4,多版本使用
-
定义多个版本
@Service(version="v1.0")
-
使用指定的版本
@Reference(version="v1.0")
5,负载均衡
负载均衡的机制:
- Random : 按照权重随机
- RoundRobin : 按照权重轮询
- LeastActive : 最少活跃调用数,相同活跃数的随机。
- ConsistentHash : 一致性Hash,相同参数的请求总是发到同一提供者。
使用
-
在服务提供者处定义权重
@Service(weight = 100) public class UserServiceImp1 implements UserService {...}
-
在服务消费者处指定负载均衡机制
//@Reference(loadbalance = "roundrobin") //@Reference(loadbalance = "leastactive") //@Reference(loadbalance = "consistenthash") @Reference(loadbalance = "random")//默认 按权重随机 private UserService userService;
6,集群容错
7,服务降级
8,zookeeper
zookeeper是hadoop下的子项目。是一个分布式小文件系统。
/
|-- robin(文件夹)
|-- bbb(文件夹)
|-- ccc(文件夹)
|-- a.txt
|-- aaa(文件夹)
zookeeper特点:
节点: 类似于windows文件和文件夹。
文件夹特点: 管理文件夹。文件夹下可以再创建子文件夹和子文件。
文件特点: 存储数据的。
Zookeeper 是一个分布式的、开源的分布式应用程序的协调服务。
节点分类:
- 持久节点 PERSISTENT
- 临时节点 EPHEMERAL
- 顺序节点 PERSISTENT_SEQUENTIAL
- 临时顺序节点 EPHEMERAL_SEQUENTIAL
8.1 常用的命令
8.1.1 服务端命令(linux)
先进入都zookeeper安装目录
在bin目录下执行如下命令
./zkServer.sh start|stop|restart|status
8.1.2 客户端命令
-
连接服务器
./zkCli.sh
-
创建节点
create /节点 数据 create -e /节点 数据 //创建临时节点,会话关系,该节点就会被删除 create -s /节点 数据
-
获取节点数据
get /节点
-
修改节点的数据
set /节点 数据
-
获取节点的子节点
ls /节点
-
删除节点
rmr /节点
8.2 javaAPI操作
curator是zookeeper的java客户端库。
8.2.1 引入jar的坐标
<!--curator-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
8.2.2 建立连接
目标: 创建客户端对象 CuratorFramework
//重试策略
RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 10); //每3秒重试一次,总共重试10次
//2.第二种方式
CuratorFramework client = CuratorFrameworkFactory.builder()
.connectString("127.0.0.1:2181")
.sessionTimeoutMs(60 * 1000)
.connectionTimeoutMs(15 * 1000)
.retryPolicy(retryPolicy)
.namespace("itheima")
.build();
//开启连接
client.start();
节点的操作:
client.create().forPath("");
client.getData().forPath("");
client.setData().forPath("");
client.delete().forPath("");
client.getChildren().forPath("");