dubbo实际应用
上一期,我们虽然搭建了dubbo项目,但是并没有利用其它的注册中心,我们直接使用的 N/A 本地地址.
但是实际上我们需要使用的是一个可以为我们提供一个消费者与生产者之间,管理这些服务并分配服务的一个中间件.因此我们引入了zookeeper
一丶配置注册中心
- 添加依赖
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
2.修改配置文件
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
常用配置
- 超时时间
- 异步调用
- 多协议支持
- 多注册中心支持
- 启动检查
- 版本兼容
- 服务只订阅、服务只注册
- 集群容错
- 负载均衡策略
超时时间-配置
客户端超时:
针对当前服务: <dubbo:provider timeout="1000"/>
针对当前接口:<dubbo:service interface="com.lerning.dubbo.user.api.service.UserService" class="com.lerning.dubbo.user.service.UserServiceImpl" timeout="1000"/>
服务端超时:
针对当前服务: <dubbo:consumertimeout="1000"/>
针对当前接口: <dubbo:reference interface="com.lerning.dubbo.user.api.service.UserService" id="userService" timeout="1000"/>
版本兼容-配置
版本不兼容的接口那么会访问不到,只有版本兼容,才能正确的访问对应的接口
配置生产者API版本号
<dubbo:service interface="com.dubbo.sms.api.SmsService" class="com.dubbo.sms.service.SmsServiceImpl" version="1"/>
消费者指定消费版本号
<dubbo:reference id="smsService" interface="com.dubbo.sms.api.SmsService" check="false" version="2"/>
消费端服务启动检查
配置:<dubbo:refrence check=true>
注意:服务启动的时候检查依赖的服务是否启动,服务循环依赖的时候需要设置成false
只订阅、只注册
当我们的服务只是单一的作为生产者/消费者时,我们可以利用这个配置实现我们的目的
服务只订阅不注册
<dubbo:registry client="zkclient" address="zookeeper://39.98.180.29:2181" register="false" />
服务只注册不订阅
<dubbo:registry address="zookeeper://39.98.180.29:2181" client="zkclient" subscribe="false"/>
集群容错机制
针对自己的项目,选择合适的集群容错机制
- failover cluster(失败重试)
说明:请求失败后会切换服务地址调用其他服务,默认3次,可通过retry设置。 - failfast cluster(快速失败)说明:只会发送一次请求
场景:一般用于非幂等性请求(比如转账、添加、修改数据建议使用) - failsafe cluster(失败安全)
说明:调用异常后直接忽略
场景:比如日志记录成功与否不影响程序运行 - failback cluster(失败恢复)
说明:请求失败后后台记录请求,定时重发
场景:类似消息重发机制的场景 - forking cluster(分叉调用)
说明:并行调用多个服务,有一个请求返回则返回
场景:类似于抢答机制的场景,谁快谁获得权力 - broadcast cluster(广播)
说明:广播调用所有服务,有一个失败则返回失败。
场景:类似数据同步,只要有一个未同步成功则失败。
负载均衡策略
- random:随机调用;
- roundrobin: 轮询调用;
- leastActive LoadBalance:最少活跃调用数,响应时间断服务优先调用。
- Consistent LoadBalance:一致性哈希 ,根据服务地址
异步调用设置
消费端
针对当前服务:
<dubbo:consumer async="true"/>
针对当前接口:
<dubbo:reference interface="com.lerning.dubbo.user.api.service.UserService" id="userService" async="ture"/>
多协议支持
- 服务端配置:
针对当前服务:
<dubbo:protocol name ="hessian" port="8090" server="jetty"/>
针对当前接口
:<dubbo:service interface="com.lerning.dubbo.user.api.service.UserService" class="com.lerning.dubbo.user.service.UserServiceImpl" protocol="hessian" />
- 客户端配置:
针对当前服务:
<dubbo:protocol name ="hessian" />
针对当前接口:
<dubbo:reference protocol="hessian" interface="com.lerning.dubbo.user.api.service.UserService" id="userService" async="ture"/>
多注册中心
- 生产端:
<dubbo:registry id="zk1" address="zookeeper://127.0.0.1:2181" />
<dubbo:registry id="zk2" address="zookeeper://localhost:2181" />
- 消费端:
<dubbo:reference interface="com.lerning.dubbo.user.api.service.UserService" id="userService" client="zk1"/>
配置优先级
第一个原则:粒度越小的优先级越高
方法级配置>接口配置> 全局配置
生产者配置方法的延时时间
消费者也配置方法的延时时间
第二个原则:客户是上帝
当生产者和消费者都配置了相同级别的属性,那么以消费者的属性为准。
dubbo管理控制台
-
下载dubbo-admin源码
https://github.com/apache/incubator-dubbo/tree/dubbo-2.6.0 -
修改源码 dubbo.properties配置
-
使用maven 打包dubbo-admin源码
-
把打包后的war部署到tomcat
-
访问 ip:8080 (用户名密码在dubbo.properties配置)