转载

spring-cloud 源码解析

为什么要看源码

  1. 因为源码获得很容易, 代码本身是最准确的讲解
  2. 推测的结论不准
  3. "实验"周期长,代价大
  4. 通过查看历史版本差异, 了解功能演化
  5. 源码面前,了无秘密

下载源码方法

直接点 CTRL + 类, 通常是编译的内容, 可以在不下载源码时简单看一下, 但有时编译效果不好, 也没有注释说明等. 这时最好是下载源码.

IDE 中都有相应功能, IDEA 和 eclipse 都有相应功能

IDEA 中下载源码 [Download Sources], 可以只下载某个 jar 包对应的源码.

spring-cloud 源码解析

命令行方式可以一次下载全部源码:

mvn dependency:sources
...
Downloading from ssllrepo: http://dev.myrepo.com/artifactory/repo/com/fasterxml/classmate/1.3.4/classmate-1.3.4-sources.jar
Downloaded from ssllrepo: http://dev.myrepo.com/artifactory/repo/com/fasterxml/classmate/1.3.4/classmate-1.3.4-sources.jar (48 kB at 694 kB/s)
...

下载的代码会保存到本地 maven 库里, 即 ${user.home}/.m2/repository

查看源码先要了解模块全图, 了解原理

核心功能:

  1. Distributed/versioned configuration
  2. Service registration and discovery
  3. Routing
  4. Service-to-service calls
  5. Load balancing
  6. Circuit Breakers
  7. Global locks
  8. Leadership election and cluster state
  9. Distributed messaging

看源码要注意的问题

  1. 要从结构上把握,胸中要有全景图
  2. 要从需求出发, 知晓作者是在解决一个什么问题
  3. 重点是作者为什么是这么解决的,好处,坏处,如何取舍的
  4. 你的时间很宝贵, 不要过度纠缠, 通过源码能解决你的疑问

最好带着问题去看

问题1: 有哪些配置选项

https://docs.spring.io/spring...

配置举例:

三种方式

application.properties 或 application.yml 或命令行选项

配置项

# REMOTE DEVTOOLS (RemoteDevToolsProperties)
spring.devtools.remote.context-path=/.~~spring-boot!~ # Context path used to handle the remote connection.
spring.devtools.remote.proxy.host= # The host of the proxy to use to connect to the remote application.
spring.devtools.remote.proxy.port= # The port of the proxy to use to connect to the remote application.
spring.devtools.remote.restart.enabled=true # Whether to enable remote restart.
spring.devtools.remote.secret= # A shared secret required to establish a connection (required to enable remote support).
spring.devtools.remote.secret-header-name=X-AUTH-TOKEN # HTTP header used to transfer the shared secret.

对应的Java类

RemoteDevToolsProperties.java

官方的 Java 包会在通过 META-INF 目录下的

spring-autoconfigure-metadata.properties
spring-configuration-metadata.json

例如:

~/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.0.3.RELEASE/spring-boot-autoconfigure-2.0.3.RELEASE.jar!/META-INF/spring-configuration-metadata.json

{
  "hints": [
    ...,
    
    {
      "name": "spring.datasource.data",
      "providers": [
        {
          "name": "handle-as",
          "parameters": {
            "target": "java.util.List<org.springframework.core.io.Resource>"
          }
        }
      ]
    },
    {
      "name": "spring.datasource.driver-class-name",
      "providers": [
        {
          "name": "class-reference",
          "parameters": {
            "target": "java.sql.Driver"
          }
        }
      ]
    },
    ...
    }

JSON 结构比较简单, 容易看懂.

在这个文件里定义了相应的配置项,数值类型,以及可能的备选项进行描述, 从而使得 IDE 可以透过代码提示, 方便用户键入.

问题2: 最小原型是什么

未完待续(鉴于很多转载/抓取的从不注明出处,我先发个半截的)

问题3: 如何调试

未完待续

问题4: 如何模拟服务失败, 模拟容错

未完待续

问题5: 如何负载均衡

未完待续

问题6: 如何进行压力测试, 模拟熔断

未完待续

问题7: 如何自动布署

未完待续

用测试代码验证自己的想法

原文  https://segmentfault.com/a/1190000020511198
正文到此结束
Loading...