简单读读源码 - 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. 配置动态刷新RefreshScope注解使用局限性(一)

    在 Spring Cloud 体系的项目中,配置中心主要用于提供分布式的配置管理,其中有一个重要的注解:@RefreshScope,如果代码中需要动态刷新配置,在需要的类上加上该注解就行.本文分享一下 ...

  2. Day11_57_自定义泛型

    自定义泛型 package com.shige.Generic; //自定义泛型 public class CustomizeGeneric { public static void main(Str ...

  3. k8s 创建私有docker仓库 登陆授权令牌的Secret

    参考https://kubernetes.io/zh/docs/tasks/configure-pod-container/pull-image-private-registry/ Kubernete ...

  4. Vue method与computed的区别

    为了说明method与computed的区别,在此我想先来看看computed属性在vue官网中的说法: 模板内的表达式是非常便利的,但是它们实际上只用于简单的运算.在模板中放入太多的逻辑会让模板过重 ...

  5. 从苏宁电器到卡巴斯基第27篇:难忘的三年硕士时光 V

    一发不可收拾 安全领域的公司都喜欢在看雪或者是吾爱破解这样的网站上发布招聘贴,因为这样的话很容易就能够招到适合的人才,也算是精准营销了.而像我这种想进入安全圈的,也会在这里发布自己的求职简历,以期望能 ...

  6. Webshell和一句话木马

    目录 Webshell(大马) 一句话木马(小马) 一句话木马原理 一句话木马的变形 JSP后门脚本 Webshell(大马) 我们经常会看到Webshell,那么,到底什么是Webshell呢? w ...

  7. Python 爬虫之urllib库的使用

    urllib库 urllib库是Python中一个最基本的网络请求库.可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据. urlopen函数: 在Python3的urlli ...

  8. 谷歌浏览器安装Vue.js devtools

    第一步:访问谷歌商店 在之前的博客中已经谈到了这一点的实现方式 https://www.cnblogs.com/10134dz/p/13552777.html 第二步:下载Vue.js devtool ...

  9. 23.Quick QML-简单且好看的图片浏览器-支持多个图片浏览、缩放、旋转、滑轮切换图片

    之前我们已经学习了Image.Layout布局.MouseArea.Button.GroupBox.FileDialog等控件. 所以本章综合之前的每章的知识点,来做一个图片浏览器,使用的Qt版本为Q ...

  10. 【Web前端HTML5&CSS3】03-字符实体与语义标签

    笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版 目录 字符实体与语义标签 1. 字符实体 2. meta标签 3. 语义标签 4. 块元素与行内元素 块元素(bloc ...