寫在前面的話html
寫這篇文章以前,也是想說說爲何想寫這篇文章,原由是個人QQ羣裏,有人但願推薦一些學Spring Boot 和分佈式的書,後來在網上隨便翻了翻,發現很多人不知道SpringBoot應該怎麼學;java
而後發現很多小夥伴走了彎路;程序員
因此就突發奇想,想寫一本關於微服務分佈式的書,我當時的念頭就是必定要比別人寫的好,必定要比別人寫的全,我要這本書上讓你碰到什麼錯,都能輕輕鬆鬆的搞定!web
我攤牌了
我攤牌了,我想給你們推薦的就是我本身寫的書,《微服務分佈式架構基礎與實戰——基於Spring Boot + Spring Cloud》;服務器
推薦書是真的,個人書可讓學生學明白也是真的。微信
Spring Boot學習難點
其實很難說Spring Boot有任何學習上的難點,畢竟Spring Boot屬於原子性整合類項目,不過是經過Spring Boot去整合各種框架、各種資源,可是Spring Boot在學習的過程當中,「坑」會超多無比,畢竟由一個項目整合另一個,所遇到的坑會不少,例如:架構
- 啓動的時候Http路徑沒有路徑重複錯誤,可是調用的時候會產生路徑重複錯誤;app
- 代碼明明寫的都對,可是啓動SpringBoot項目報錯;框架
- 總有些文件讓SpringBoot沒法掃描到;分佈式
- N多個Spring的application配置文件,到最後SpringBoot究竟聽誰的?
- 好幾種不一樣的啓動參數,到最後Spring Boot按照誰的執行?
- SpringBoot爲何會有端口最大限制?
- YAML文件明明和別人的寫的如出一轍,爲何個人就報錯了?
- ...
Spring Cloud學習難點
Spring Cloud的學習難點有不少,主要分爲兩個方面,第一個方面是對分佈式的理解和總體項目的搭建、應用。第二個方面是代碼中也存在着一些細小的坑。
細小的坑例如:
- Feign調用時候,爲何調用帶有」-」的程序會發生報錯?
- Swagger與Feign版本怎麼還會衝突?
- Feign的攔截器爲何生效了兩次?
搭建的難點例如:
- 我已經按照操做步驟搭建好了Consul集羣,可是爲什麼註冊在其中一個Consul上以後,集羣中的其它Consul沒法讀取我這個Spring Boot相關的信息。
- 爲何會出現Quartz這種分佈式任務調度?緣由是什麼?和別的分佈式內容不一樣,這也不是個中間件啊。
- 個人FastDFS分佈式文件管理系統究竟哪裏搭建的不對,致使一直沒有正確存儲上。
- ...
個人書中幫助你們的方式
在java學習的中後期,學生們總會發現,我明明代碼和書裏寫的如出一轍,爲何他就沒報錯?我就報錯了?是否是書裏寫的有問題?有錯誤?
其實通常的計算機類書籍有錯也正常,由於高級語言更新迭代速度不是通常的快,基本上三年前的書你如今看,就已經跟不上時代了,勉強學完發現社會上也不用那些個細枝末節,由於高級語言不一樣於計算機底層,計算機底層好多年前已是這個樣子了,可是爲了敏捷開發、爲了高性能、爲了分佈式、爲了低延時,突飛猛進的框架、技術、思想開始不斷衝擊着全部的在職人員和學生,你們急缺的是易上手,易幫本身解決問題的書籍
我在書裏寫了幾十個實例,每個實例都是總體功能的一部分,可讓讀者儘快上手這一部分知識內容,帶着你敲代碼。
如果您說,大部分書籍都是這樣的,那您可錯了,個人每一個實例後面都會跟着一個【易錯點】的小節,該小節中,會把大部分您可能出現問題的點,給暴露出來,而且提供了相應的解決方案,以下所示:
該小節將.properties文件格式轉換成了YAML格式,可是這個格式看起來簡單,錯的人卻很是多!大部分人都把port前面的空格部分使用了TAB鍵進行輸入,但是YAML並不承認這種書寫方式,因此我提供了易錯點,告訴你們不能這麼書寫;
另外例如該小節中,正常狀況下也沒法看出來空格的個數,我也經過易錯點的方式,詳細的向讀者進行說明,以下所示:
=============================================================
每個小節,我都儘量的把出現問題,細微的坑,給你們說明出來,讓讀者花最少的時間,學會這門技術,例以下面這個小節;
在同一個YAML文件之中,能夠同時設置多組不一樣的參數,經過」---」三個短橫線來進行處理,如果前面增長了空格,或者TAB之類的內容,則總體程序會報錯;
每個實例都有易錯點,我統統摘了出來告訴你們,如果其中有易錯點沒有說到,我也建立了一個書友羣,天天只要有時間,我也都願意回答讀者問題:
對了,針對於文中提過的學習難點,我在書中的易錯點裏一一有解答;
對了每一個章節以後,我都設了幾道針對該章節的練習題,若是以爲書籍沒有徹底看懂的話,就像高中初中同樣,拿着課後題,作答案,用這種方式去讓讀者自身有一個衡量,題能作懂那說明這章節內容就學會了,題作不懂,那就是不會;這樣簡單粗暴的辦法,給讀者一個標尺,不能說這章節我已經看完了,那我還不清楚本身會不會,這時候就有一些題給你們作,讓你們知道,本身是否真的學會了,例題以下所示:
![]() |
我努力教你們分佈式和集羣的搭建
在我售賣這本書的過程當中,有些讀者給我反饋,以爲這書寫的有一些難了,例如文中須要一點點Linux基礎、文中在教你們集羣的搭建和分佈式搭建的內容;
我並不以爲這樣的是一件很差的事情,我也特別但願別人能夠告訴我,以爲我書裏哪寫的很差,我但願有一天這本書能夠再版,讓我增長更多的技術內容進去;
我想回答一下這幾個問題吧,第一,須要一點Linux基礎是我以爲,工做的時候你們必備Linux基礎纔可以工做,微服務分佈式的學習,絕對絕對不僅是代碼而已,如果只會寫代碼、不會搭建,那在思想上始終都捅不破分佈式的那層紙;
集羣也是如此,我在書中含有任務調度集羣、註冊中心集羣等等的集羣架構,每一行操做,先作什麼、再作什麼,近乎寫的像一個說明書,集羣雖然不是分佈式,可是集羣和分佈式的概念太容易讓人混淆了,太多人臨找工做的時候,都分不清什麼是集羣、什麼是分佈式、什麼是微服務羣!
集羣和分佈式某種程度上來講,都十分的簡單,我我的的方式就是經過搭建+代碼的方式先學習完大部份內容,而後發現本身深入的悟透了這份思想,如果這份思想學到了,那如今讓讀者寫一個本身的Redis,就叫myRedis,該Redis含有集羣的能力,只要有這份思想,這個代碼是十分容易實現的,可能就幾千行代碼就能夠作到這件事情,而且有許多不一樣的實現方案在等着你,你能夠盡情的書寫;
這些方案其實很簡單,學習這份思想是很是不容易的,可是從搭建+寫代碼這種實現方式,去逐漸接近這份思想,將會下降整件事情的難度!
千萬不要畏懼Linux、畏懼集羣、畏懼搭建,或者說畏懼那些不寫代碼作的服務器的工做、畏懼接受一份非人類的思想,如果都畏懼都不懂的狀況下,那十年工做的程序員所作的事情,和三年程序員所作的事情將會沒有任何區別;
我但願我能夠真正幫助到你們
程序這個行業裏、這個學業裏,並無至高無上的神、無所不能的神,咱們都是不斷在技術路上努力爬行的,我但願我能夠幫助到其餘人,幫助到當初和我同樣,找不到適合實戰的書籍;
誠然我技術並不是特別優秀,這本書也不能說是天衣無縫的頂級,可是我在編寫的過程當中,不斷的和沒有學過的人進行探討,不斷的和經過這本書學習完微服務分佈式的人進行交流,但願別人能夠受益,但願本身能夠幫助到其餘人,畢竟這也是我幾年累計的經驗,換五十塊一本,其實在我內心沒任何意義,可是我特別高興有讀者學完,學會了之後特別興奮的來找我溝通、反饋,告訴我哪裏學會了,哪裏還差點,那種感受,跟吃了甜品同樣,感受幸福極了,感受我幫到其餘人了;
我想用真心換真心,但願我努力的做品,可以讓您滿意,能幫助到您,不管從架構上、搭建上、代碼上、思想上;
謝謝個人編輯支持我出了這本書,謝謝個人讀者會喜歡這本書,張方興在這裏給您鞠躬了~
http://product.dangdang.com/28532818.html
2020年9月9日星期三夜
本文分享自微信公衆號 - 北漂程序員的吐槽人生(beipiaochengxuyuan)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。