优先级关系:
1.JVM -D参数,当你部署或者启动应用时,它可以轻易地重写配置,比如,改变dubbo协议端口;
2.外部化配置,指将配置集中起来放在注册中心服务器上或其它。
3. ServiceConfig、ReferenceConfig等编程接口采集的配置
4.XML, XML中的当前配置会重写dubbo.properties中的;
5..Properties,默认配置,仅仅作用于以上两者没有配置时(application.properties优先级比dubbo.properties更高)。
dubbo:consumer和dubbo;provider配置内容优先级低于其它标签配置内容
如果springbootresources目录下同时又xml和properties文件,项目引用xml文件,里面如果内容不同会保错。
常用属性(可以在service或者reference里配置):
超时属性:timeout
重试次数:retries 不包含第一次调用
幂等方法:可以重试,比如数据库的查询,删除,修改,多次操作不影响结果。
非幂等方法:不可以重试,比如数据库插入等。
版本号version:可以利用版本号来实现灰度发布,提供方可以用版本号来发布同一个接口的不同实现,消费方配置可以用版本号来选择要调用的服务,或者随机选择。
其它功能:
本地存根:指消费端有一个本地实现,要求必须有一个构造器参数是服务接口。可以进行一些本地参数校验或者缓存发现决定是否真正调用。(
与springboot整合的3种方式:
1使用application.propertise文件配置基本信息,可以在@Service和@Reference注解上配置属性,使用@EnableDubbo开启注解功能(其实就是自动进行扫描)
2使用@ImportResource(locations=“xml配置文件路径”),相对比其它配置来说可以具体到方法级别
3使用纯注解的方式。
高可用:通过设计,减少系统不能提供服务的时间。
1、zookeeper服务器宕机:消费者可用通过本地缓存继续提供服务
2、dubbo直连:在没有注册中心的情况下,我们可以配置消费端url直接连接服务端
3集群模式下负载均衡:基于权重的随机负责均衡机制、基于权重的轮询负载机制,最小活跃数负载均衡机制、一致性hash负载均衡机制
4服务降级:当服务器压力剧增,根据实际业务情况和流量,对一些服务和页面有策略的不处理或者换一种简单的方式进行处理,从而释放服务器资源达到保证核心服务和业务的正常运作或高效运作。
Mock=force:return+null:不调用远程服务,直接返回null
Mock=fail:return+null:调用远程服务失败后,返回null
5集群容错:
Failover Cluster
失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。
重试次数配置如下:
或
或
Failfast Cluster
快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
Failsafe Cluster
失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
Failback Cluster
失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
Forking Cluster
并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。
Broadcast Cluster
广播调用所有提供者,逐个调用,任意一台报错则报错 [2]。通常用于通知所有提供者更新缓存或日志等本地资源信息。
集群模式配置
按照以下示例在服务提供方和消费方配置集群模式
或
先通过代理对象来执行一些自定义的filter比如本地存根、本地伪装、结果缓存等等。然后通过MockClusterInvoker调用invoke方法,再调用集群容错类的invoke方法,在注册中心找到有几个可以执行的invoker,再通过负载均衡策略选出一个执行,在执行之前执行一些系统的filter,比如监控中心的统计。最后在Dubboinvoker里得到执行的客户端对象,通过客户端对象发起请求,发送后返回,超时报错或重试,然后再进行一系列解码操作,最后返回结果。