zoukankan      html  css  js  c++  java
  • Dubbo Configuration

    可配置参数

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

    与 spring 整合的几种方式

    SpringBoot 与 dubbo 整合的三种方式:
    
    http://dubbo.apache.org/zh-cn/docs/user/configuration/annotation.html
    1)、导入 dubbo-starter,在 application.properties 中配置属性
    	 使用 @Service【暴露服务】使用 @Reference【引用服务】使用 @EnableDubbo【开启扫描,相当于配置 dubbo.scan.base-packages】
    
    http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html
    2)、导入 dubbo-starter,保留 dubbo xml 配置文件(这样可保留方法级别的配置)
    	 在启动类上使用 @ImportResource(locations="classpath:dubbo.xml") 导入 dubbo 的配置文件即可
    
    http://dubbo.apache.org/zh-cn/docs/user/configuration/api.html
    3)、使用注解 API 的方式,将每一个组件手动创建到容器中,让 dubbo 来扫描其他的组件

     API 方式配置例子,使用 @Service【暴露服务】使用 @Reference【引用服务】使用【@EnableDubbo】配置 Dubbo 扫描,开启基于注解的 dubbo 功能

    package com.gmall.config;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import com.alibaba.dubbo.config.ApplicationConfig;
    import com.alibaba.dubbo.config.MethodConfig;
    import com.alibaba.dubbo.config.MonitorConfig;
    import com.alibaba.dubbo.config.ProtocolConfig;
    import com.alibaba.dubbo.config.ProviderConfig;
    import com.alibaba.dubbo.config.RegistryConfig;
    import com.alibaba.dubbo.config.ServiceConfig;
    import com.gmall.service.UserService;
    
    @EnableDubbo(scanBasePackages="com.gmall")
    @Configuration
    public class MyDubboConfig {
        
        @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="20882"></dubbo:protocol>
        @Bean
        public ProtocolConfig protocolConfig() {
            ProtocolConfig protocolConfig = new ProtocolConfig();
            protocolConfig.setName("dubbo");
            protocolConfig.setPort(20882);
            return protocolConfig;
        }
        
        /**
        <dubbo:service interface="com.gmall.service.UserService" ref="userServiceImpl01" timeout="1000" version="1.0.0">
            <dubbo:method name="getUserAddressList" timeout="1000"/>
        </dubbo:service>
         */
        @Bean
        public ServiceConfig<UserService> userServiceConfig(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);
            
            //ProviderConfig
            //MonitorConfig
            
            return serviceConfig;
        }
    }
    View Code

    配置优先级

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

    JVM参数配置 > 外部化配置 > 代码配置 > 配置文件((dubbo.xml || application.properties) >  (dubbo.properties 通常写公共属性配置))

    启动时检查

    http://dubbo.apache.org/zh-cn/docs/user/demos/preflight-check.html

    Dubbo 默认会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成。

    <!--关闭某个服务的启动时检查 (没有提供者时报错)-->
    <dubbo:reference interface="com.foo.BarService" check="false"/>
    <!--关闭所有服务的启动时检查 (没有提供者时报错)-->
    <dubbo:consumer check="false"/>
    <!--关闭注册中心启动时检查 (注册订阅失败时报错)-->
    <dubbo:registry check="false"/>

    超时设置(timeout),默认为一秒(1000ms)

    消费者与提供者之间方法调用的时间,超过则会抛出异常,提供者与消费者都可配置,具体生效依据不同粒度配置的覆盖关系,消费方默认超时时间取自提供方。

    建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置。

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

    <!-- 
        1)、精确优先 (方法级优先,接口级次之,全局配置再次之)
        2)、消费者设置优先(如果级别一样,则消费方优先,提供方次之)
    -->
    
    <!--提供方设置-->
    <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService" timeout="1000"/>
    
    <!--提供方设置,精确到方法-->
    <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService">
        <dubbo:method name="sayHello" timeout="1000"/>
    </dubbo:service>
    
    <!--所有提供方默认设置-->
    <dubbo:provider timeout="1000"/>

    不同粒度配置的覆盖关系

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

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

    • 方法级优先,接口级次之,全局配置再次之。
    • 如果级别一样,则消费方优先,提供方次之。

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

    重试次数(retries),默认为 2 ,不包含第一次调用,即一共会调用 3 次

    消费方默认重试次数设置取自提供方,设置方式与超时设置类似。

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

    <!-- retries="":重试次数,不包含第一次调用,0代表不重试
    幂等操作(可设置重试次数)【如查询、删除、修改】,执行多少次产生的效果一样
    非幂等操作(不能设置重试次数)【如新增】
    如果该服务有多个,那么当前服务出错后,会重试其它机器上相同的服务,不会一直调用相同地址上的服务
    -->
    
    <!--提供方设置,精确到方法-->
    <dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService">
        <dubbo:method name="sayHello" retries="3"/>
    </dubbo:service>

    多版本设置(灰度发布)

    http://dubbo.apache.org/zh-cn/docs/user/demos/multi-versions.html

    当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用。

    可以按照以下的步骤进行版本迁移:

    1. 在低压力时间段,先升级一半提供者为新版本
    2. 再将所有消费者升级为新版本
    3. 然后将剩下的一半提供者升级为新版本
    <!--老版本服务提供者配置-->
    <dubbo:service interface="com.foo.BarService" version="1.0.0" />
    <!--新版本服务提供者配置-->
    <dubbo:service interface="com.foo.BarService" version="2.0.0" />
    
    <!--老版本服务消费者配置-->
    <dubbo:reference id="barService" interface="com.foo.BarService" version="1.0.0" />
    <!--新版本服务消费者配置-->
    <dubbo:reference id="barService" interface="com.foo.BarService" version="2.0.0" />
    
    <!--如果不需要区分版本,可以按照以下的方式配置-->
    <dubbo:reference id="barService" interface="com.foo.BarService" version="*" />

    本地存根

    http://dubbo.apache.org/zh-cn/docs/user/demos/local-stub.html

    消费者在调用提供者之前可以做一些操作,来决定要不要调用提供者(就是为具体实现创建一个代理对象)

    以之前的 HelloWord 为例,为 DemoService 创建本地存根(一般在接口项目中创建)

    package org.apache.dubbo.demo;
    
    public class DemoServiceStub implements DemoService {
    
        private final DemoService demoService;
    
        // 构造函数传入真正的远程代理对象
        public DemoServiceStub(DemoService demoService){
            this.demoService = demoService;
        }
    
        @Override
        public String sayHello(String name) {
            // 此代码在客户端执行, 你可以在客户端做ThreadLocal本地缓存,或预先验证参数是否合法,等等
            try {
                System.out.println("DemoServiceStub.....");
                return demoService.sayHello(name);
            } catch (Exception e) {
                // 你可以容错,可以做任何AOP拦截事项
                return "容错数据";
            }
        }
    }

    配置,消费方和提供方都可以配置,这里在消费方配置。

    <dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" stub="org.apache.dubbo.demo.consumer.DemoServiceStub"/>
    
    <!--或者-->
    <dubbo:reference id="demoService" interface="org.apache.dubbo.demo.DemoService" stub="true"/>
  • 相关阅读:
    TCP与UDP在socket编程中的区别
    使用python selenium webdriver模拟浏览器
    Web性能测试参数
    DPDK学习之开篇介绍
    go环境import cycle not allowed问题处理
    使用etcd+confd管理nginx配置
    服务的扩展性
    linux 网络编程
    单片机成长之路(stm8基础篇)- 025 stm8 时钟切换
    单片机成长之路(51基础篇)- 024 基于 N76E003 的按键按键状态机
  • 原文地址:https://www.cnblogs.com/jhxxb/p/10810358.html
Copyright © 2011-2022 走看看