快速入门
将service服务方改造成dubbo
- service层的@Service注释从springframe的变成dubbode
- 在applicationContext.xml中进行配置dubbo和zookeeper
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!-- 配置dubbo-->
<!-- 配置项目的名称,必须唯一-->
<dubbo:application name="dubbo-service"/>
<!-- 配置注册中心的地址-->
<dubbo:registry address="zookeeper://192.1.3.81:2181"/>
<!-- 配置dubbo包扫描-->
<dubbo:annotation package="com.itheima.service.Impl"/>
</beans>
- 导入web文件
对web层进行改造
- 编写一个共同接口类来处理service层
- 通过@reference进行远程注入
/*
@Reference有三个作用:
1.从zookeeper注册中心去获取url
2.进行远程调用RPC
3.将结果封装为一个远程的代理对象,给变量赋值
*/
@Reference //通过dubbo进行远程注入
private UserService userService;
高级特性
dubbo-admin管理平台
自己百度
序列化
dubbo将序列化和反序列化发封装了
我们只需要在定义破击类时实现SerialLizable接口即可
一般会定义一个公共的pojo模块,让生产者和消费者都依赖该模块
地址缓存
注册中心挂了,服务是否可以正常访问?
- 可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心
- 当服务提供者地址发生变化时,注册中心会通知服务消费者,更新地址缓存
超时与重试
- 消费者在地哦啊哦用时候发生了阻塞,等待的情形,这个时候服务消费者就会一直等待下去
- 在某个峰值的时候,大量的请求都在同事请求服务消费者,会造成先县城的大量堆积,势必会造成雪崩
- dubbo利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。
多版本
负载均衡
负载均衡策略
Random:按权重随机,默认值,按权重设置随机概率。
RoundRobin:按权重轮询
LeastActive:最少活跃调用数,相同活跃数的随机
ConsistentHash:一致性Hash,相同参数的请求总是发送到同一个机器
集群容错
集群仍需哦模式: