spring-cloud 源碼解析

爲何要看源碼

  1. 由於源碼得到很容易, 代碼自己是最準確的講解
  2. 推測的結論不許
  3. "實驗"週期長,代價大
  4. 經過查看歷史版本差別, 瞭解功能演化
  5. 源碼面前,了無祕密

下載源碼方法

直接點 CTRL + 類, 一般是編譯的內容, 能夠在不下載源碼時簡單看一下, 但有時編譯效果很差, 也沒有註釋說明等. 這時最好是下載源碼.html

IDE 中都有相應功能, IDEA 和 eclipse 都有相應功能
IDEA 中下載源碼 [Download Sources], 能夠只下載某個 jar 包對應的源碼.java

圖片描述

命令行方式能夠一次下載所有源碼:git

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/repositorygithub

查看源碼先要了解模塊全圖, 瞭解原理

核心功能:spring

  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...sql

配置舉例:
三種方式
application.properties 或 application.yml 或命令行選項json

配置項segmentfault

# 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.javaapp

官方的 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: 如何自動佈署

未完待續

用測試代碼驗證本身的想法

請 mark https://segmentfault.com/a/11... 等待更新。

相關文章
相關標籤/搜索