dubbo配置

5 篇文章 0 订阅

dubbo配置官网参考:http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-service.html

1、配置原则

将XML配置的标签名,加属性名,用点分割,多个属性拆成多行。
比如:dubbo.application.name=foo等价于<dubbo:application name=“foo”/>

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

2.启动时检查

Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check=“true”。

可以通过 check=“false” 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。

另外,如果你的 Spring 容器是懒加载的,或者通过 API 编程延迟引用服务,请关闭 check,否则服务临时不可用时,会抛出异常,拿到 null 引用,如果 check=“false”,总是会返回引用,当服务恢复时,能自动连上。
在这里插入图片描述

以order-service-consumer消费者为例,在consumer.xml中添加配置

<!--关闭某个服务的启动时检查(没有提供者时报错)-->
 <dubbo:reference interface="com.yujie.UserService" check="false"></dubbo:consumer>
<!--配置当前消费者的统一规则,当前所有的服务都不启动时检查-->
 <dubbo:consumer check="false"></dubbo:consumer>
 

添加后,即使服务提供者不启动,启动当前的消费者,也不会出现错误。
3、全局超时配置
服务消费方在引用服务提供方的时候,可能由于网络原因,服务提供方需要执行一个方法,可能会有很长时间,如果很长时间没有返回,导致大量线程都在阻塞,引起性能下降。
超时设置是指如果在指定时间内没有返回,就立即终止,不让大量线程阻塞。
默认超时时间是1000ms.

设置调用某个服务的超时设置
<dubbo:reference interface="com.yujie.service.UserService" id="userService" timeout="3000></dubbo:reference>
设置调用某个服务的超时设置
<dubbo:reference interface="com.yujie.service.UserService" id="userService" timeout="3000>
	<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>	//此生效
</dubbo:reference>

精确优先规则

全局超时配置
<dubbo:provider timeout="5000" />

指定接口以及特定方法超时配置
<dubbo:provider interface="com.foo.BarService" timeout="2000">
    <dubbo:method name="sayHello" timeout="3000" />
</dubbo:provider>

以timeout为例,显示了配置的查找顺序,其它retires,loadbalance,actives等类似
方法级优先,接口级次之,全局配置再次之
如果级别一样,则消费方优先,提供方次之。
其中,服务提供方配置,经过URL经由注册方传递给消费方

retries:重试次数。
当超时之后,远程服务调用失败,我们可以通过调整重试次数,让其多试上几次,重试次数不包含第一次调用。0代表不重试

<dubbo:reference interface="com.yujie.service.UserService" id="userService" timeout=5000” retries="3">

重试并非在一台服务器上尝试。
我们将方法分为幂等和非幂等,幂等方法上可以设置重试次数来提升方法的性能,非幂等方法上不能设置重试次数。
幂等方法指的是方法不管运行多少次,结果都是一个效果,如查询、删除、修改
方法每一次运行都会产生一个效果。如新增。

配置原则

dubbo推荐在Provider上尽量多配置Consumer端属性

1、作服务的提供者,比服务使用方更清楚服务性能参数,如调用的超时时间,合理的重试次数,等等
2、在Provider配置后,Consumer不配置则会使用Provider的配置值,即Provider配置可以作为Consumer的缺省值。否则,Consumer会使用Consumer端的全局设置,这对于Provider不可控的,并且往往是不合理的

配置的覆盖规则:

方法级配置别优于接口级别,即小Scope优先
Consumer端配置 优于 Provider配置 优于 全局配置,
最后是Dubbo Hard Code的配置值(见配置文档)
在这里插入图片描述

多版本

当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。
可以按照以下的步骤进行版本迁移:
0.在低压力时间段,先升级一半提供者为新版本
1.再将所有消费者升级为新版本
2然后将剩下的一半提供者升级为新版本
老版本服务提供者配置:
http://dubbo.apache.org/zh-cn/docs/user/demos/multi-versions.html
在服务提供者中复制多个impl。起不同的名字
在这里插入图片描述
在这里插入图片描述
配置多个文件的路径及信息。
服务消费者调用时,可自由配置版本
在这里插入图片描述
添加后,即使服务提供者不启动,启动当前的消费者,也不会出现错误。

dubbo与springboot整合的三种方式

1、将服务提供者注册到注册中心(如何暴露服务)
1.1导入Dubbo的依赖 和 zookeeper 客户端

2、让服务消费者去注册中心订阅服务提供者的服务地址
Springboot与Dubbo整合的三种方式
2.1导入dubbo-starter。在application.properties配置属性,使用@Service【暴露服务】,使用@Reference【引用服务】
2.2保留Dubbo 相关的xml配置文件
导入dubbo-starter,使用@ImportResource导入Dubbo的xml配置文件

3、使用 注解API的方式
将每一个组件手动配置到容器中,让dubbo来扫描其他的组件

  • Springboot与dubbo整合的三种方式
  • 1.导入dubbo-starter,在application.properties配置属性,使用@Service暴露服务,使用@Reference远程调用
  • 服务,同时要开启包扫描功能,可以在配置文件中声明,也可以在启动类中开启@EnableDubbo注解
  • 2.保留dubbo xml配置文件的方式,provider.xml的方式。在启动类中写@ImportResource(locations = “classpath:provider.xml”)
  • 3.使用注解API的方式,写配置类。DubboConfig。将每一个组件手动创建到容器中。
/*配置dubbo规则*/
//什么标签,就有什么样的config
public class MyDubboConfig {
    //        <dubbo:application name="user-service-provider"></dubbo:application>
    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("boot-user-service-provider");
        return applicationConfig;
    }

    //        <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setProtocol("zookeeper");
        registryConfig.setAddress("127.0.0.1:2181");
        return registryConfig;
    }

    //        <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
    @Bean
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setName("dubbo");
        protocolConfig.setPort(20880);
        return protocolConfig;
    }
//    <dubbo:service interface="com.yujie.service.UserService" ref="userServiceImpl"></dubbo:service>
    @Bean
    public ServiceConfig<UserService> userServiceServiceConfig(UserService userService){
        ServiceConfig<UserService> serviceConfig=new ServiceConfig<>();
        serviceConfig.setInterface(UserService.class);
        serviceConfig.setRef(userService);
        serviceConfig.setVersion("1.0.0");
        //配置每一个method的信息
        MethodConfig methodConfig=new MethodConfig();
        methodConfig.setName("getUserAddressList");
        methodConfig.setTimeout(1000);

        //将method的设置关联到service配置中
        List<MethodConfig> methods=new ArrayList<>();
        methods.add(methodConfig);
        serviceConfig.setMethods(methods);
        return serviceConfig;
    }
}
@EnableDubbo        //开启基于注解的dubbo功能
//@ImportResource(locations = "classpath:provider.xml")
@DubboComponentScan("com.yujie")        //指定配置包扫描路径
@SpringBootApplication
public class BootUserServiceProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(BootUserServiceProviderApplication.class, args);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值