简单读读源码 - dubbo多提供者(provider)配置方法

  1. 消费者端dubbo的yml配置

    dubbo:
    consumer:
    timeout: 300000
    protocol:
    name: dubbo
    port: -1
    cloud:
    subscribed-services: order-server
    # subscribed-services: hello-server,account-server,storage-server,order-server
  2. 按住ctrl + 鼠标左击subscribed-services如下图:

  3. 这里是对应的setter方法,上面找到定义地方:

    	/**
    * All services of Dubbo.
    */
    public static final String ALL_DUBBO_SERVICES = "*"; /**
    * The subscribed services, the default value is "*". The multiple value will use
    * comma(",") as the separator.
    *
    * @see #ALL_DUBBO_SERVICES
    */
    private String subscribedServices = ALL_DUBBO_SERVICES;

    读一读就知道答案了。


    接下来,走走最表面的流程,就是看看怎么处理我们输入的数据的,至于是在哪里找的,先不管。

  4. 光标点到类DubboCloudProperties上面,这里ctrl+单击是点不进去的,但是你点一下有提醒:

    No usages found in Project Files
    Press Ctrl+Alt+F7 again to search in 'Project and Libraries
  5. 跟着提醒,Ctrl+Alt+F7,如果提醒关闭了,就双击F7,出来下图。

  6. 直接回车,就是高亮的这一行。回去复制ubscribedServices,不要开头的s,不管大写还是小写,Ctrl+F搜出来看看。

  7. 通过点击向上向下的箭头,或者F3(下一个)/Shift+F3(上一个)来读一读源码。这里我们看到他在237行时候进行了初始化。

  8. 老样子,ctrl+单击initSubscribedServices()方法。

    读一下,如果ALL_DUBBO_SERVICES等于我们输入的提供者,就是输出巴拉巴拉。

  9. 那么ALL_DUBBO_SERVICES是啥,ctrl点,发现又跳回第一个文件了:

    @ConfigurationProperties(prefix = CONFIG_PROPERTY_PREFIX)
    public class DubboCloudProperties { /**
    * All services of Dubbo.
    */
    public static final String ALL_DUBBO_SERVICES = "*"; // 这里是默认为*,如果set方法没有执行,那么get时候获得的就是*
    private String subscribedServices = ALL_DUBBO_SERVICES; /* ... */ }
  10. 现在测试一下输出那个东西,启动一个提供者,然后消费者订阅的提供者写成*或者注释掉。启动消费者。

    查看日志:

    2021-05-27 16:28:24.950  WARN 6564 --- [client.listener] a.c.d.m.r.DubboServiceMetadataRepository : Current application will subscribe all services(size:20) in registry, a lot of memory and CPU cycles may be used, thus it's strongly recommend you using the externalized property 'dubbo.cloud.subscribed-services' to specify the services

    与步骤8中一致。

  11. 接着读else,如果我们填入内容了,就subscribedServices()后加入到那个集合中

    newSubscribedServices.addAll(dubboCloudProperties.subscribedServices());

    ctrl点subscribedServices(),然后发现又转到第一个文件了:

    再继续读一下:使用commaDelimitedListToStringArray将我们输入的东西转化了字符串数组,处理返回。

  12. 我们来看看commaDelimitedListToStringArray怎么处理的,找到导入它的地方:

    import static org.springframework.util.StringUtils.commaDelimitedListToStringArray;

    然后ctrl点:

    	/**
    * Convert a comma delimited list (e.g., a row from a CSV file) into an
    * array of strings.
    * @param str the input {@code String} (potentially {@code null} or empty)
    * @return an array of strings, or the empty array in case of empty input
    */
    public static String[] commaDelimitedListToStringArray(@Nullable String str) {
    return delimitedListToStringArray(str, ",");
    }

    这里与标题3.中The multiple value will use comma(",") as the separator.对应。

  13. 结论:

    • 不写或者*会订阅所有的。

    • 写多就使用,隔开。

简单读读源码 - dubbo多提供者(provider)配置方法的更多相关文章

  1. dubbo源码分析2-reference bean发起服务方法调用

    dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...

  2. HashMap就是这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树的基础了: Collection总览 List集合就这么简单[源码剖析] Ma ...

  3. LinkedHashMap就这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前面已经讲了Collection的总览和剖析List集合以及散列表.Map集合.红黑树还有HashMap基础了: Collection总览 List集合就这么简单[ ...

  4. TreeMap就这么简单【源码剖析】

    前言 声明,本文用得是jdk1.8 前面章节回顾: Collection总览 List集合就这么简单[源码剖析] Map集合.散列表.红黑树介绍 HashMap就是这么简单[源码剖析] LinkedH ...

  5. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  6. mybatis源码分析--如何加载配置及初始化

    简介 Mybatis 是一个持久层框架,它对 JDBC 进行了高级封装,使我们的代码中不会出现任何的 JDBC 代码,另外,它还通过 xml 或注解的方式将 sql 从 DAO/Repository ...

  7. 5.2 spring5源码--spring AOP源码分析二--切面的配置方式

    目标: 1. 什么是AOP, 什么是AspectJ 2. 什么是Spring AOP 3. Spring AOP注解版实现原理 4. Spring AOP切面原理解析 一. 认识AOP及其使用 详见博 ...

  8. 年终福利,PHP7+Apache2.4+MySQL5.6 源码编译安装,环境配置,搭建你自己的LAMP环境

    PHP7 都出来了,你还在玩PHP5吗? MySQL5.6 早都出来了,你还在玩MySql5.2吗? Apache2.4 早都出来了,你还在玩Apache2.2吗? 笔者不才,愿意亲自搭建环境,供搭建 ...

  9. 迅为4412开发板QtE系统源码-屏幕横竖屏切换修改方法

    迅为4412开发板QtE系统源码-屏幕横竖屏切换修改方法 详情了解:http://topeetboard.com 更多了解:https://arm-board.taobao.com/ 用户在开发板上运 ...

随机推荐

  1. 破解class文件的第一步:深入理解JAVA Class文件

    摘要: java定义了一套与操作系统,硬件无关的字节码格式,这个字节码就是用java class文件来表示的,java class文件内部定义了虚拟机可以识别的字节码格式,这个格式是平台无关性的. j ...

  2. Day09_45_Set集合_SortedSet02

    SortedSet * TreeSet是SortedSet接口的实现类,TreeSet底层是一个TreeMap,相当于TreeMap中的key. * SortedSet集合是如何实现自动排序的呢? - ...

  3. Qt开发技术:Qt拽拖开发(一)拽托框架详解及Demo

    前话   Qt中的拽拖操作详细介绍.   Demo 图片拽拖    控件拽拖    窗口拽拖    拽托框架(高级开发)        拖放(Drag and Drop)   拖放提供了一种简单的可视 ...

  4. 【OO课下讨论】bug中的“二八定律”

    bug中的"二八定律" 本文主要为讨论2020/3/17下午OO课讨论的第三个思考题设立 有一个经典的经验性原则,叫帕累托原则,也称为二八定律.这个原则在经济.社会和科技等多个领域 ...

  5. [重要更新]微信小程序登录、用户信息相关接口调整:使用 wx.getUserProfile 取代 wx.getUserInfo

    2021年2月24日,微信官方团队发布了一个调整通知:<小程序登录.用户信息相关接口调整说明>,公告明确从4月13日起,所有发布的小程序将无法使用 wx.getUserInfo 接口(JS ...

  6. 【ShardingSphere】ShardingSphere学习(二)-核心概念-SQL

    逻辑表 水平拆分的数据库(表)的相同逻辑和数据结构表的总称. 例:订单数据根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order. 真实表 在分片的数 ...

  7. 从苏宁电器到卡巴斯基第25篇:难忘的三年硕士时光 III

    阴差阳错,走上了讲师的道路 时间已经来到了2015年的1月,我的找工作之路也是屡败屡战,屡战屡败.金山.百度以及腾讯不约而同地不要我,使得我对于自己的未来充满了迷茫.尽管才研二而已,可是对于我这种没有 ...

  8. 路由器逆向分析------firmware-mod-kit工具安装和使用说明

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/68061957 一.firmware-mod-kit工具的安装 firmware-m ...

  9. PAT 乙级 -- 1002 -- 写出这个数

    题目: 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字 ...

  10. POJ3122贪心或者二分(分蛋糕)

    题意:        m+1个人来分n个蛋糕,每个人分到的蛋糕数必须一样而且还必须是同一个蛋糕上的,问每个人最多分多少蛋糕? 思路:      能想到的方法有两种,一个是直接贪心,另一个就是二分,这个 ...