1.dubbo的容错机制;
1)、Failover Cluster:失败自动切换,当出现失败,重试其他服务器
2)、Failfast Cluster:快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作。
3)、Failsafe Cluster:失败安全,出现异常时,直接忽略,通常用于写入审计日志等操作。
4)、Failback Cluster:失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作。
5)、Forking Cluster:并行调用多个服务器,只要一个成功即返回,通常用于实际性要求比较高的读写操作,但需要浪费更多服务资源,可通过forks="2"来设置最大并行数;
6)、Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错,
*在实际应用中查询语句容错策略建议使用默认Faillover Cluster,而增删改建议使用Failfast Cluster或者使用Failover Cluster(retries="0")策略,防止出现数据,重复添加等待其他问题
2.dubbo中遇到的问题
1)、增加提供服务版本号和消费服务版本号
这个具体来说不算是个问题,而是一种问题的解决方案,在我们的实际工作中面临各种环境资源短缺的问题,刚刚开始提供一个服务进行相关开发和测试,但是当有多个环境多个版本,多个任务的时候,就不满足我们的需求,通过提供方增加版本的方式来区分,
<dubbo:serviceinterface="com.XXX.XXXservice" ref="xXXservice" version="1.0"/>
<dubbo:referceid="xxxService" interface="com.XXX.XXXservice" version="1.0">
2)、dubbo reference注解
@Reference只能在springbean实例对应的当前类中使用,暂时无法在父类使用;如果确实要在父类声明一个引用,可通过配置文件配置dubbo:reference,然后在引用的地方跟引用sprinbean一样可以;
3)、出现RpcException:No provid for remote service异常,表示没有可用的服务提供者
a.检查链接的注册中心是否真确
b.到注册中心查看相应的服务提供者是否存在
c.检查服务提供者是否正常进行
4)、服务提供者没挂,在注册中心看不到
确认服务提供者是否链接真确的注册中心,地址网络等链接;看看服务器提供者是否繁忙,阻塞
3.dubbo链接方式
广播,直连,zookeeper注册中心
1)、dubbo广播:
manager服务端配置
<!-- 提供方应用信息,用于计算机依赖关系 -->
<dubbo:application name="manager-service"/>
<!-- 使用multicate广播暴露服务地址 -->
<dubbo:registry address="multicast://ip:port"/>
<!-- 使用dubbo协议在20880协议暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.**.**.Testservice" ref="testserviceImpl"/>
客户端配置manager-web配置
<!-- 配置dubbo服务 -->
<dubbo:application name="manager-web"/>
<!-- 使用multicast广播暴露服务地址 -->
<dubbo:registry address="multicast://ip:port"/>
<!-- 声明要调用的服务timeout是设置连接超时最长时间,如果不设置,默认超时时间3秒 -->
<dubbo:service interface="com.***.Testservice" id="testService" timeout="60000"/>
2)、dubbo直连
服务端配置:取消广播,注册中心地址N/A
<!-- 提供方应用信息,用于计算机依赖关系 -->
<dubbo:application name="manager-service"/>
<!-- <dubbo:registry address="multicast://ip:port"/> -->
<dubbo:registry address="N/A">
<!-- 使用dubbo协议在20880协议暴露服务 -->
<dubbo:protocol name="dubbo" port="20880"/>
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.**.**.Testservice" ref="testserviceImpl"/>
manager-web配置,取消广播,从指定url中获取服务
<!-- 配置dubbo服务 -->
<dubbo:application name="manager-web"/>
<!-- 声明要调用的服务timeout是设置连接超时最长时间,如果不设置,默认超时时间3秒 -->
<dubbo:service interface="com.***.Testservice" id="testService" timeout="60000"/>
3)、zookeeper注册中心
服务交给注册中心管理,
a.provider:暴露服务的服务提供方。
b.consumer:调用远程服务的服务消费方。
c.registry:服务注册与发现注册中心。
d.Monitor:统计服务的调用次调和调用时间的监控中心。
e.container:服务运行容器。
调用关系:
a.服务容器负责启动,加载,运行服务提供者。
b.服务提供者在启动时,向注册中心注册自己提供的服务。
c.服务消费者在启动时,向注册中心订阅自己所需的服务。
d.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
e.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
f.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。