简单读读源码 - 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. Go+gRPC-Gateway(V2) 微服务实战,小程序登录鉴权服务(六):客户端基础库 TS 实战

    小程序登录鉴权服务,客户端底层 SDK,登录鉴权.业务请求.鉴权重试模块 Typescript 实战. 系列 云原生 API 网关,gRPC-Gateway V2 初探 Go + gRPC-Gatew ...

  2. redhat7.6 更换 centos7 YUM

    使用yum 遇到如下错误. This system is not registered to Red Hat Subscription Management. You can use subscrip ...

  3. 如何把 Caffeine Cache 用得如丝般顺滑?

    一.关于 Caffeine Cache 在推荐服务中,虽然允许少量请求因计算超时等原因返回默认列表.但从运营指标来说,越高的"完算率"意味着越完整的算法效果呈现,也意味着越高的商业 ...

  4. 关于SpringBoot结合mybatis后遇到的坑

    先放出我遇到的出错信息,真的出错了可以先看看出错信息,就能更加高效准确的搜索到信息 我的报错日志: org.springframework.beans.factory.UnsatisfiedDepen ...

  5. MVC之实现基于token的认证

    安装Nuget包 项目中添加包:dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer 添加认证配置 Startup类中添加如 ...

  6. Python中如何生成requirements.txt文件

    Python项目中一般都包含一个名为 requirements.txt 文件,用来记录当前项目所有的依赖包和版本号,在一个新环境下通过该文件可以更方便的构建项目所需要的运行环境. 生成requirem ...

  7. hdu4847 水题

    题意:       你看了上面很长很长的一片英语课文之后,发现根本不用看,直接看输入输出就行了,就是给你一坨字符串,然后问你里面有几个doge(不区分大小写). 思路:       没啥说的,直接写吧 ...

  8. CTB-Locker敲诈者病毒下载器分析

    一. 样本基本信息 样本名称:927354529512.scr 样本大小:110592 字节 病毒名称:Win32.Trojan.Ctb-locker.Auto 样本MD5值:3A6D7E551C13 ...

  9. POJ 1679 判断最小树是否唯一

    题意:       给你一个图,问你最小树是否唯一,唯一则输出最小数的权值,不唯一输出Not Unique! 思路:      题目问的是最小树是否唯一,其实也就是在问次小树是否等于最小树,如果等于则 ...

  10. 在Windows上使用终端模拟程序连接操作Linux以及上传下载文件

    在Windows上使用终端模拟程序连接操作Linux以及上传下载文件 [很简单,就是一个工具的使用而已,放这里是做个笔记.] 刚买的云主机,或者是虚拟机里安装的Linux系统,可能会涉及到在windo ...