成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么

如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么,針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比相山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式相山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋相山地區(qū)。費用合理售后完善,十載實體公司更值得信賴。

參與開源

現(xiàn)在具體來聊聊參與開源的事;

日常幾乎所有的開發(fā)者都會享受到開源項目所帶來的便利甚至是收益,受限于環(huán)境早在十幾年前甚至幾年前開源活動一直都是有國外開發(fā)者主導。

但這幾年國內(nèi)互聯(lián)網(wǎng)公司逐漸國際化擴大影響力也很大程度的提高了我們的開發(fā)水平,以 BAT 為首出現(xiàn)了許多優(yōu)秀的開源項目。

現(xiàn)在甚至參與開源項目還能另辟蹊徑的拿到大廠 offer,所以其實不少朋友都想?yún)⑴c其中,可能這事給人的第一感覺就不太容易,所以現(xiàn)在還卡在第一步。

具體步驟

以下是以我個人經(jīng)驗總結(jié)的幾大步驟:

  • 發(fā)現(xiàn)問題或自薦 feature 。

  • fork 源碼。

  • 本地開發(fā)、自測。

  • 發(fā)起 pull request

  • 等待社區(qū) Code Review 。

  • 跟進社區(qū)意見調(diào)整代碼。

  • 審核通過,合并進 master 分支,完成本次貢獻。

下面我會結(jié)合最近一次參與 Dubbo 的流程來具體聊聊。

發(fā)現(xiàn)問題或自薦 feature

首先第一步自然要搞清楚自己本次貢獻的內(nèi)容是什么?通常都是解決某個問題或者是提交一個新的 feature ;前者相對起來更加容易一些。

當然這個問題可以是自己使用過程中發(fā)現(xiàn)的,也可以是 Issues 列表中待解決的問題。

以本次為例,就是我在使用過程中所發(fā)現(xiàn)的問題,也提交了相關(guān) Issue 并寫了一篇文章記錄并解決了該問題:What?一個 Dubbo 服務(wù)啟動要兩個小時!

值得注意的是在提交 Issue 之前最好是先在 Issue 列表中通過關(guān)鍵字檢索下是否已經(jīng)有相關(guān)問題,避免重復。

同時提交之后也許社區(qū)會進行跟進,被打上 invalid 標簽認為不是問題,或者是使用姿勢不對也是有可能的。

fork 源碼,本地開發(fā)

當確定這是一個待修復的問題時就可以著手開發(fā)了。

首先第一步自然是將源碼拷貝一份到自己倉庫中。

如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么

接著只需要 clone 自己倉庫中的源碼到本地進行開發(fā)。

先回顧下我遇到的這個問題。

如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么

簡單來說就是啟動 Dubbo 服務(wù)非常緩慢,經(jīng)過定位是 main 線程阻塞在了獲取本機 ip 處。

所以當時我提出的方案是:在獲取本機 ip 時加上超時時間,一旦超時便拋出異常或者是再次重試,但起碼得有日志方便用戶定位問題。

問題是主線程會一直阻塞在此處 InetAddress.getLocalHost().getHostAddress(),但又需要知道它阻塞了多久才好判斷是否超時。

所以只能再額外開啟一個線程,定時去檢測 main 線程是否已經(jīng)完成任務(wù)了,以下便是我第一次 pr 的內(nèi)容。

如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么 如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么

這次的重點不是討論這里具體的技術(shù)細節(jié),所以簡單說下步驟:

  • 額為聲明了大小為 1 的線程池。

  • 再聲明了一個 volatile 標志用于判斷主線程是否有完成任務(wù)。

  • 聲明了一個 condition 用于新線程做等待。

  • 最后只需要運行這個線程用于判斷這個標志即可。

如何自測

開發(fā)完成后下一步就是自測,由于這類項目是作為一個基礎(chǔ)包依賴于其他的項目才能運行的,所以通常我們還得新建一個項目來配合做全流程測試(單測除外)。

這里我覺得還是有幾個小技巧值得注意。

第一個是版本號;因為在本地測試,所以需要使用 mvn clean install 將包安裝到本地才能在其他項目中依賴進去進行測試。

但由于我們從官方拉出來的代碼版本都已經(jīng)發(fā)布到了 maven 中央倉庫中(不管是 release 還是 snapshot),所以我們本地倉庫中肯定已經(jīng)存在這幾個版本的 jar 包。

一旦我們執(zhí)行 mvn clean install 將自己修改的代碼安裝到本地時,大概率是會出問題的(也可能是我姿勢不對),這樣就會導致新建的項目中依賴不了自己新增的代碼。

所以我通常的做法是修改版本號,這個版本號是從來沒有被官方發(fā)布到中央倉庫中的,可以確保自己新增的代碼會以一個全新版本安裝到本地,這樣我們再依賴這個版本進行測試即可。

不過再提交時得注意不要把這個版本號提交上去了。

發(fā)起 pull request

自測完成后便可發(fā)起 pull request 了,不要大意,這里還得有一個地方需要注意,那就是代碼換行符的問題。

一旦換行符與源倉庫的不一致時,git 會認為這次修改是刪除后重來的,這樣會給 code review 帶來巨大的麻煩。

如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么

就像這樣,明明我改動的行數(shù)并不多,但 git 確認為你是推翻了重來,導致審核起來根本不知道你改了哪些地方。

最簡單的方法就是設(shè)置自己 git 的全局配置,可以參考這里。

# 提交時轉(zhuǎn)換為LF,檢出時轉(zhuǎn)換為CRLF
git config --global core.autocrlf true

# 提交時轉(zhuǎn)換為LF,檢出時不轉(zhuǎn)換
git config --global core.autocrlf input

# 提交檢出均不轉(zhuǎn)換
git config --global core.autocrlf false

如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么

確認沒問題后便可點擊這里發(fā)起 pull request,后面按照引導執(zhí)行即可。

當然各個項目之間還會有自己定制的貢獻流程,最好就是查看官方的貢獻指南。

http://dubbo.apache.org/en-us/docs/developers/contributor-guide/new-contributor-guide_dev.html

Code Review

pr 發(fā)起后便可等待社區(qū)審核了。

在這過程中要充分和社區(qū)進行交流,有可能你的方案和社區(qū)的想法并不一致。

比如像我這次:

如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么 如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么 最終通過溝通加上自己后面的思考覺得還是社區(qū)的方案更加輕便合理一些,達成一致之后社區(qū)便將這次 pr 合并進 master 中。

其實整個過程我覺得最有意義的便是 code review 的過程,所有人都可以參與其中頭腦風暴,其中也不乏技術(shù)大牛,不知不覺便能學到不少東西。

類似案例

雖然我之前的方案沒有被采納,但類似的用法(一個線程監(jiān)控其他線程)還是不少,正好在 Dubbo 中也有用到。

便是其中核心的服務(wù)調(diào)用,默認情況下對使用者來說這看起來是一個同步調(diào)用,也就是說消費方會等待 RPC 執(zhí)行完畢后才會執(zhí)行后續(xù)邏輯。

但其實在底層這就是一個 TCP 網(wǎng)絡(luò)包的發(fā)送過程,本身就是異步的

只是 Dubbo 在你不知道的情況下做了異步轉(zhuǎn)同步,這樣看起來就像是一個同步方法。

如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么

如圖中的紅框部分,Dubbo 自身調(diào)用了 get() 方法用于同步獲取服務(wù)提供者的返回結(jié)果。

如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么

邏輯其實也挺簡單,和我上文的方案類似,只是這里的 isDone() 函數(shù)返回的是是否已經(jīng)拿到了服務(wù)提供者的返回值而已。

總結(jié)了參與開源的具體步驟,其實也挺簡單;就如官方所說哪怕是提個 Issue,修改一個錯別字都算是參與,所以不要想的太難。

最后還簡單分析了 Dubbo 調(diào)用過程中的異步轉(zhuǎn)同步的過程,掌握這些操作對自己平時開發(fā)也是很有幫助的。

關(guān)于如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

網(wǎng)站標題:如何參與一個頂級開源項目以及Dubbo調(diào)用過程中的異步轉(zhuǎn)同步是什么
文章源于:http://jinyejixie.com/article18/pgspdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站營銷、網(wǎng)站內(nèi)鏈、虛擬主機、軟件開發(fā)、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
册亨县| 舟曲县| 佛坪县| 荔波县| 泽普县| 德州市| 横峰县| 九台市| 西丰县| 泽库县| 南安市| 洛浦县| 太仓市| 耒阳市| 桃园市| 安吉县| 柘城县| 兰州市| 武乡县| 黄浦区| 武夷山市| 自贡市| 左云县| 富锦市| 高密市| 广昌县| 常山县| 高淳县| 时尚| 定州市| 昭苏县| 清水县| 永顺县| 焦作市| 喀喇沁旗| 稷山县| 白水县| 鲁山县| 通化县| 炉霍县| 洞头县|