参考dubbo官方文档
[http://dubbo.apache.org/books/dubbo-user-book/configuration[官方文档]
1.本地dubbo环境的搭建
环境
java1.8
maven
idea
zookeeper
dubbo
dubbo的搭建不需要依赖spring框架,
maven的依赖中加入 dubbo,zkClient, spring-context(主要用来加载配置文件)即可。
由于公司电脑是window环境,个人电脑是mac。同样的项目在mac环境中跑不起来。
报如下的错:
Caused by: java.lang.ClassNotFoundException: org.apache.curator.RetryPolicy
dubbo的默认zookeeper的实现是用zkclient。这个错误好像是默认成curator
在 registry中指定 客户端实现,问题解决
<dubbo:registry address="zookeeper://127.0.0.1:2181" client="zkclient"/>
2.覆盖关系
- 方法级优先,接口级次之,全局配置再次之。
- 如果级别一样,则消费方优先,提供方次之。
如:
<dubbo:provider timeout="10000"/>
<dubbo:application name="demo-provider"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:service interface="com.tiany.DemoService" ref="demoService" timeout="5000">
<dubbo:method name="sayHello" timeout="1000"/>
</dubbo:service>
<bean id="demoService" class="demo.DemoServiceImpl"/>
现在像timeout这个属性,有全局的dubbo:provider, 有接口级别 dubbo:interface,有方法级别 dubbo:method
测试1:在DemoService的sayHello方法中Thread.sleep(1200);超过method的超时时间,小于接口的超市时间
结果:消费端会报超时异常
测试2:provider的sayHello方法中Thread.sleep(900), 客户端配置方法级别的超时时间是800,如下:
<dubbo:reference id="demoService" interface="com.tiany.DemoService" >
<dubbo:method name="sayHello" timeout="800"/>
</dubbo:reference>
结果:消费端会报超时异常
配置的覆盖策略:
java -D > xml > properties
3.服务的注册和发现
服务注册的几种方式:
- multicast 注册中心
- zookeeper注册中心
- redis注册中心
- simple注册中心
4.集群容错
几种类型:
- Failover
失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries=”2” 来设置重试次数(不含第一次) - Failfast
快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录
如果我failover设置retries = 0 跟 failfast 有什么区别?
- Failsafe
失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。 - Failback
失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。 - Forking
并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=”2” 来设置最大并行数。 - Broadcast
广播调用所有提供者,逐个调用,任意一台报错则报错 。通常用于通知所有提供者更新缓存或日志等本地资源信息