• Dubbo基本用法-Dubbo Provider配置


    [这里是图片001]

    Dubbo基本用法-Dubbo Provider配置

    中间件小哥 2018-06-12 20:44:41 浏览939 评论0

    摘要: 本章节主要讲述如何配置dubbo,按照配置方式上分,可以分为:XML配置,properties方式配置,注解方式配置,API调用方式配置。

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    按照功能角度进行划分,可以分为Dubbo Provider和Dubbo Consumer。

    • 1

    Dubbo基本用法

    本章节主要讲述如何配置dubbo,按照配置方式上分,可以分为:XML配置,properties方式配置,注解方式配置,API调用方式配置。
    按照功能角度进行划分,可以分为Dubbo Provider和Dubbo Consumer。接下来章节中,分别对dubbo provider和Dubbo consumer进行讲解。

    Dubbo Provider配置

    Provider 配置详解

    配置Dubbo Provider有4种方式:XML配置,properties方式配置,API调用方式配置,注解方式配置。

    XML配置
    最简单的配置的样例:
    
      
          
          
          
          
          
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    上面样例中,注意下dubbo schema的写法:

    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    支持的配置标签

    标签

    用途

    解释

    dubbo:service/

    服务配置

    用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心

    dubbo:reference/

    引用配置

    用于创建一个远程服务代理,一个引用可以指向多个注册中心

    dubbo:protocol/

    协议配置

    用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受

    dubbo:application/

    应用配置

    用于配置当前应用信息,不管该应用是提供者还是消费者

    dubbo:module/

    模块配置

    用于配置当前模块信息,可选

    dubbo:registry/

    注册中心配置

    用于配置连接注册中心相关信息

    dubbo:monitor/

    监控中心配置

    用于配置连接监控中心相关信息,可选

    dubbo:provider/

    提供方配置

    当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选

    dubbo:consumer/

    消费方配置

    当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选

    dubbo:method/

    方法配置

    用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息

    dubbo:argument/

    参数配置

    用于指定方法参数配置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8CLgDBiT-1660437234982)(https://cdn.yuque.com/lark/0/2018/png/15841/1527849348155-8423d401-9ea4-4dc6-8720-d9e3d90963b6.png “undefined”)]

    配置之间关系图

    配置项详解

    • 用于指定应用名,这里需要保证应用名唯一,这个应用名在后续的console admin中可以在列表中显示,方便管理。

    • 注册中心配置,和服务发现的具体机制有关系。可以是zookeeper地质,也可以eureka地质。上面这个是广播地址,在本地服务调用的测试过程中非常方便。

    • 这里是传输的协议和默认端口,一般不需要更改。

    接下来重点讲解下dubbo:service/的配置。

    • dubbo:service/支持的主要属性列表:
      | 属性名 | 说明 |

    version

    版本号

    scope

    服务可见性, 值为:local 或者 remote,默认为remote

    actives

    最大的激活的请求数

    async

    方法调用是否异步,默认为false

    cache

    服务缓存,可选值:lru/threadlocal/jcache

    callbacks

    callback实例的限制

    generic

    泛化调用,可以绕过

    class

    Service的实现的类名

    connections

    这个服务里的连接数

    delay

    发布服务延迟的毫秒数

    executes

    服务执行的请求上限

    retries

    超时重试次数

    timeout

    调用超时时间

    其他配置属性请参考xsd:http://dubbo.apache.org/schema/dubbo/dubbo.xsd

    • dubbo:method/作为dubbo:service/的子元素,它可以针对方法进行配置。比较常用的属性有:

    属性名

    说明

    executes

    服务执行的请求上限

    retries

    超时重试次数

    timeout

    调用超时时间

    其他属性,可以参考上面的xsd。

    配置的覆盖关系

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6UP5IXDb-1660437234984)(https://cdn.yuque.com/lark/0/2018/png/15841/1527849374313-94a5ea24-0e72-4d83-871b-e0e95eab646a.png “undefined”)]

    配置的覆盖关系图

    这里的覆盖关系包含了Provider和Consumer两端的配置,如果对consumer有疑问,可以参考后一章节的consumer章节之后再来理解。

    dubbo.properties方式配置

    如果公共配置很简单,没有多注册中心,多协议等情况,或者想多个 Spring 容器想共享配置,可以使用 dubbo.properties 作为缺省配置。

    Dubbo 将自动加载 classpath 根目录下的 dubbo.properties,可以通过JVM启动参数 -Ddubbo.properties.file=xxx.properties 改变缺省配置位置。

    dubbo.properties配置样例
    # 应用名
    dubbo.application.name=dubbodemo-provider
    # 注册中心地址
    dubbo.registry.address=zookeeper://localhost:2181
    # 广播的注册中心样例
    #dubbo.registry.address=multicast://224.5.6.7:1234
    # 调用协议地址
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=28080
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    映射规则

    将 XML 配置的标签名,加属性名,用点分隔,多个属性拆成多行

    • 比如:dubbo.application.name=foo等价于
    • 比如:dubbo.registry.address=10.20.153.10:9090等价于

    如果 XML 有多行同名标签配置,可用 id 号区分,如果没有 id 号将对所有同名标签生效

    • 比如:dubbo.protocol.rmi.port=1234等价于 2
    • 比如:dubbo.registry.china.address=10.20.153.10:9090等价于
    覆盖策略

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zyp1fiFP-1660437234984)(https://cdn.yuque.com/lark/0/2018/png/15841/1527849393591-2c3de248-1b3d-47d3-bd10-8b415e9fcd39.png “undefined”)]

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

    注意:

    1. 如果 classpath 根目录下存在多个 dubbo.properties,比如多个 jar 包中有 dubbo.properties,Dubbo 会任意加载,并打印 Error 日志,后续可能改为抛异常。
    2. 协议的 id 没配时,缺省使用协议名作为 id
    annotation
    Service注解暴露服务
    import com.alibaba.dubbo.config.annotation.Service;
    
    • 1

    @Service(timeout = 5000)
    public class AnnotateServiceImpl implements AnnotateService {
    // …
    }

    javaconfig形式配置公共模块
    @Configuration
    public class DubboConfiguration {
    
    • 1
    • 2

    }

    这种方式的配置和前面用xml配置的方式是一样的效果。

    指定dubbo扫描路径
    @SpringBootApplication
    @DubboComponentScan(basePackages = "com.alibaba.dubbo.test.service.impl")
    public class ProviderTestApp {
        // ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    或者使用spring bean xml配置方式:

    
    
    • 1
    api直接触发
    import com.alibaba.dubbo.rpc.config.ApplicationConfig;
    import com.alibaba.dubbo.rpc.config.RegistryConfig;
    import com.alibaba.dubbo.rpc.config.ProviderConfig;
    import com.alibaba.dubbo.rpc.config.ServiceConfig;
    import com.xxx.XxxService;
    import com.xxx.XxxServiceImpl;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    // 服务实现
    XxxService xxxService = new XxxServiceImpl();

    // 当前应用配置
    ApplicationConfig application = new ApplicationConfig();
    application.setName(“xxx”);

    // 连接注册中心配置
    RegistryConfig registry = new RegistryConfig();
    registry.setAddress(“10.20.130.230:9090”);
    registry.setUsername(“aaa”);
    registry.setPassword(“bbb”);

    // 服务提供者协议配置
    ProtocolConfig protocol = new ProtocolConfig();
    protocol.setName(“dubbo”);
    protocol.setPort(12345);
    protocol.setThreads(200);

    // 注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口

    // 服务提供者暴露服务配置
    ServiceConfig service = new ServiceConfig(); // 此实例很重,封装了与注册中心的连接,请自行缓存,否则可能造成内存和连接泄漏
    service.setApplication(application);
    service.setRegistry(registry); // 多个注册中心可以用setRegistries()
    service.setProtocol(protocol); // 多个协议可以用setProtocols()
    service.setInterface(XxxService.class);
    service.setRef(xxxService);
    service.setVersion(“1.0.0”);

    // 暴露及注册服务
    service.export();

    一般在spring应用中,不推荐使用这种方式。 具体的含义这里不做解释,可以通过github查看源码。

    Provider 接口和实现

    上面章节更多从配置角度出发,接下来通过一个完整的例子,来讲解下dubbo provider的完整使用。

    这个例子中只有一个服务UserReadService,有一个方法 getUserById。 需要将这个服务通过Dubbo暴露给远程的服务。具体的步骤如下:

    1.创建工程
    如果本来已经有工程,可以忽略。创建一个spring boot工程,可以通过 https://start.spring.io/ 创建。
    2.定义接口
    定义接口:UserReadService

    public interface UserReadService{
    public User getUserById(Long userId);
    }
    
    • 1
    • 2
    • 3

    这个接口一般来说会放到独立的jar包里,作为client包。 其他应用要消费这个服务的时候,一般来说需要应用引用这个client包。(除了泛化调用)
    3.实现接口
    实现UserReadService, 当前实现部署在Provider的应用中。

    public UserReadServiceImpl implements UserReadService{
        public User getUserById(Long userId){
            return xxx;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.Dubbo配置

    
      
          
          
          
        
          
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    Dubbo配置的其他方式可以参考上一章节的相关配置,或者使用集成dubbo spring boot starter方式。

        
                
    

    用云栖社区APP,舒服~

    【云栖快讯】诚邀你用自己的技术能力来用心回答每一个问题,通过回答传承技术知识、经验、心得,问答专家期待你加入!  详情请点击

    网友评论

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
  • 相关阅读:
    专精特新中小企业申报条件
    有偿找IRT项目反应原理模型的朋友解答
    HttpUtils工具类
    金融行业蓄电池监控,究竟有多厉害!
    H12-831题库(华为HCIP认证题库)
    Android12 新特性及适配指南
    GWAS中的effect与数量遗传学中的替换效应
    金仓数据库KingbaseES客户端编程接口指南-Perl DBI(3. DBI 类)
    电子检索实体书「GitHub 热点速览 v.22.12」
    Linux使用操作(一)
  • 原文地址:https://blog.csdn.net/m0_67393828/article/details/126328104