zoukankan      html  css  js  c++  java
  • dubbo属性配置

    一、覆盖策略

    JVM启动-D参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
    XML次之,如果在XML中有配置,则dubbo.properties中的相应配置项无效。
    Properties最后,相当于缺省值,只有XML没有配置时,dubbo.properties的相应配置项才会生效,通常用于共享公共配置,比如应用名。

    详见官方文档:http://dubbo.apache.org/zh-cn/docs/user/configuration/properties.html

    二、启动时检查

    Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check="true"。
    可以通过check="false"关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。
    另外,如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭check,否则服务临时不可用时,会抛出异常,拿到null引用,如果check="false",总是会返回引用,当服务恢复时,能自动连上。

    1、通过spring配置文件
    关闭某个服务的启动时检查(没有提供者时报错):
    <dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" check="false"/>
    关闭所有服务的启动时检查 (没有提供者时报错):
    <dubbo:consumer check="false" />
    关闭注册中心启动时检查 (注册订阅失败时报错):
    <dubbo:registry check="false" />
    2、通过 dubbo.properties
    dubbo.reference.com.lina02.gmall.service.UserService.check=false
    dubbo.reference.check=false
    dubbo.consumer.check=false
    dubbo.registry.check=false
    3、通过 -D 参数
    java -Ddubbo.reference.com.lina02.gmall.service.UserService.check=false
    java -Ddubbo.reference.check=false
    java -Ddubbo.consumer.check=false
    java -Ddubbo.registry.check=false
    4、配置的含义
    dubbo.reference.check=false,强制改变所有reference的check值,就算配置中有声明,也会被覆盖。
    dubbo.consumer.check=false,是设置check的缺省值,如果配置中有显式的声明,如:<dubbo:reference check="true"/>,不会受影响。
    dubbo.registry.check=false,前面两个都是指订阅成功,但提供者列表是否为空是否报错,如果注册订阅失败时,也允许启动,需使用此选项,将在后台定时重试。

    详见官方文档:http://dubbo.apache.org/zh-cn/docs/user/demos/preflight-check.html

    三、超时时间

    由于网络或服务端不可靠,会导致调用出现一种不确定的中间状态(超时)。为了避免超时导致客户端资源(线程)挂起耗尽,必须设置超时时间。

    配置覆盖关系:
    以timeout为例,显示了配置的查找顺序,其它retries,loadbalance,actives等类似:

    精确优先 (方法级优先,接口级次之,全局配置再次之)
    消费者设置优先(如果级别一样,则消费方优先,提供方次之)

    其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。

    详见官方文档:http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-reference.html

    http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-consumer.html

    http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html

    四、重试次数

    失败自动切换,当出现失败,重试其它服务器,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。

    重试次数配置如下:
    <dubbo:service interface="com.lina02.gmall.service.UserService" ref="userServiceImpl" retries="2"/>
    <dubbo:service interface="com.lina02.gmall.service.UserService" ref="userServiceImpl">
        <dubbo:method name="getUserAddressList" retries="5"/>
    </dubbo:service>
    <dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" retries="4"/>
    <dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService">
       <dubbo:method name="getUserAddressList" retries="2"/>
    </dubbo:reference>
    

    retries="":重试次数,不包含第一次调用,0代表不重试
    幂等(设置重试次数)[查询、删除、修改]、非幂等(不能设置重试次数)[新增)

    五、版本号

    当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
    可以按照以下的步骤进行版本迁移:
    在低压力时间段,先升级一半提供者为新版本
    再将所有消费者升级为新版本
    然后将剩下的一半提供者升级为新版本

    老版本服务提供者配置:
    <dubbo:service interface="com.lina02.gmall.service.UserService" ref="userServiceImpl" version="1.0.0"/>
    新版本服务提供者配置:
    <dubbo:service interface="com.lina02.gmall.service.UserService" ref="userServiceImpl" version="2.0.0"/>
    老版本服务消费者配置:
    <dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" version="1.0.0"/>
    新版本服务消费者配置:
    <dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" version="2.0.0"/>
    如果不需要区分版本,可以按照以下的方式配置:
    <dubbo:service interface="com.lina02.gmall.service.UserService" ref="userServiceImpl" version="*"/>
    <dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" version="*"/>
    

    六、本地存根

    远程服务后,客户端通常只剩下接口,而实现全在服务器端,但提供方有些时候想在客户端也执行部分逻辑,比如:做ThreadLocal缓存,提前验证参数,调用失败后伪造容错数据等等,此时就需要在API中带上Stub,客户端生成Proxy实例,会把Proxy通过构造函数传给Stub,然后把Stub暴露给用户,Stub可以决定要不要去调Proxy。

    本地存根类:

    package com.lina02.gmall.service.impl;
    
    import java.util.List;
    
    import com.lina02.gmall.bean.UserAddress;
    import com.lina02.gmall.service.UserService;
    import org.springframework.util.StringUtils;
    
    public class UserServiceStub implements UserService {
    	
    	private final UserService userService;
    
    	/**
    	 * 传入的是userService远程的代理对象
    	 * @param userService
    	 */
    	public UserServiceStub(UserService userService) {
    		super();
    		this.userService = userService;
    	}
    
    	@Override
    	public List<UserAddress> getUserAddressList(String userId) {
    		System.out.println("UserServiceStub.....");
    		if(!StringUtils.isEmpty(userId)) {
    			return userService.getUserAddressList(userId);
    		}
    		return null;
    	}
    
    }
    

    consumer.xml配置本地存根:

    <dubbo:reference interface="com.lina02.gmall.service.UserService" id="userService" stub="com.lina02.gmall.service.impl.UserServiceStub"/>
    

    详见官方文档:http://dubbo.apache.org/zh-cn/docs/user/demos/local-stub.html

  • 相关阅读:
    【Quartz】1、Quartz使用说明
    【Servlet】1、Servlet监听器及相关接口
    【IDEA&&Eclipse】5、IntelliJ IDEA常见配置
    Chris Richardson微服务实战系列
    Traefik Kubernetes 初试
    用友iuap云运维平台支持基于K8s的微服务架构
    DCOS中监控和弹性伸缩方案经验
    使用微服务架构改造遗留系统
    kubernetes中port、target port、node port的对比分析,以及kube-proxy代理
    基于prometheus监控k8s集群
  • 原文地址:https://www.cnblogs.com/xidian2014/p/9862490.html
Copyright © 2011-2022 走看看