隨着spring的發展咱們發現spring提供了愈來愈多的項目來幫咱們簡化框架的搭建,使咱們站在巨人的肩膀行走,讓咱們更關注於開發咱們的邏輯。隨着技術的更替,咱們的新項目也逐漸使用了springboot來構建他們,對於老項目來講,有時候現有的架構愈來愈沉重,慢慢咱們就會使用這些新技術慢慢來重構它,它能夠幫咱們省去不少配置,讓咱們更迅捷的開發。咱們這篇文章講解的是springcloud,但爲何要先提到springboot呢,由於它是基於springboot的一個項目,它包含了多個子項目,這些子項目融合瞭如今不少成熟的開源框架,來幫助咱們完成咱們的設計須要。在開始spring cloud以前我先說一下我遇到的場景。spring boot跟spring cloud這兩個項目在我印象中兩年前就很火了,然而那時候咱們大部分小公司可能用的仍是springmvc,spring,mybatis,咱們作項目也是採用分佈式的方式,經過dubbo跟zookeeper完成服務的註冊與發現,隨着技術的換代,咱們新項目的項目決定使用spring boot來快速構建,項目中不一樣的業務採用微服務的架構風格使用spring cloud來進行通訊調用,當時對於spring boot跟spring cloud的學習也沒有應用,在使用新技術搭建項目的過程當中萌生了寫這篇文章的想法,鞏固並記錄,雖然有不少這種文章,但也但願個人文章也對大家有一點點的幫助。html
在網上或者一些技術羣裏常常能看到幾個詞,soa、分佈式、微服務,好多人也會問這些有什麼區別。我對於他們的理接,soa是一種面向服務架構的方式,分佈式是多個項目分佈在不一樣的物理機上解決單體機構壓力過大等一系列問題,微服務強調的是是一種架構風格,早在很早Martin Fowler就發表過一篇關於微服務的博客,他主要強調微服務是一種架構風格,他們之間採用http的輕量級通訊,我在網上看到一箇中文翻譯過的https://www.jianshu.com/p/4821a29fa998,原文https://martinfowler.com/articles/microservices.html。它們之間也不能說徹底有區別,但與不能說他們就是一個東西,它們強調的地方不一樣。這裏話很少說,咱們來開始使用spring cloud。spring
在使用spring cloud的時候咱們發現他又不少版本,它不像其餘spring的項目版本的命名,它的版本順序從網上一搜不少介紹,我就不復制過來,還有m、sr等版本就不去介紹了。開始demo以前咱們須要先了解一下spring cloud提供的相關組件,Eureka(百度百科):springboot
由百度百科能夠知道Eureka,他是netflix的一個服務發現框架,他被spring cloud整合到本身的項目裏,他能夠幫助咱們完成服務的註冊與發現,spring cloud還提供了其餘的組建consul,由於spring將他們封裝咱們只須要添加一個註解將pom文件引入啓動器就可使用,這裏咱們使用Eureka來寫demo,咱們先來建立項目,咱們能夠經過https://start.spring.io/來建立項目導入編輯器,這裏咱們使用工具直接快速建立,原理仍是去訪問前面的地址幫咱們建立項目:mybatis
打開idea,file-->new-->project架構
在咱們的主啓動類添加註解mvc
@EnableEurekaServer註解意思表明咱們使用Eureka做爲服務註冊中心,默認狀況它會把本身看成服務註冊到註冊中心,咱們須要在配置文件禁用該功能
而後咱們啓動項目,訪問項目地址localhost:8881
訪問項目發現如今尚未服務註冊在上面,接下來咱們建立一個服務的提供者並註冊,按照上面的步驟繼續建立項目,在主程序添加註解@EnableDiscoveryClient,這個註解的意思是讓註冊中心發現框架
配置文件編輯器
而後咱們編寫一個簡單的求和方法分佈式
這裏注意咱們寫的方法必定是放在主程序包下的,不然訪問不到會提示404ide
啓動項目發現服務的提供者已經註冊上去了
如今服務的註冊中心跟提供者都有了,咱們須要在建立一個消費者,消費者調用咱們寫好的方法,輸出結果。這篇文章會介紹幾種服務的消費者,先以LoadBalancerClient爲例寫一個例子,建立一個新項目再主程序上添加註解@EnableDiscoveryClient,並添加文件:
配置文件:
再建立一個調用的controller
啓動訪問項目地址:
爲何這麼寫,這麼用先不作介紹,後面的文章會分享爲何這麼用,spring cloud作了什麼。繼續,如今把消費者換成Ribbon
訪問項目
與上面的不一樣之處在於咱們再RestTemplate上添加@LoadBalanced註解,controller只須要寫服務的名字就能夠調用到服務的提供者,這裏簡單說一下,咱們把RestTemplate添加到容器中的是由於咱們要使用spring cloud給咱們提供的自動配置,spring boot的不少自動配置類都是***AutoConfiguration,緣由在這,咱們仍是簡單說一下,後面的文章再詳細介紹,包括咱們調用服務只寫了服務的名字是由於攔截器幫咱們把名稱替換成了IP地址加上端口號的形式,它是怎麼加上的這些這裏先不作解釋。下面繼續介紹Feign,Feigin也能夠幫咱們完成咱們的功能,固然他還整合了更多的更多功能,咱們先來試一下Feign的使用
配置文件:
主程序:
建立一個controller跟service
訪問項目
發現這樣寫就跟咱們用dubbo差很少,經過注入服務的方法就能調用,這裏面要注意的地方是你寫的這個接口裏的方法裏面傳的參數必定要指定參數名,不然啓動項目會報一個錯誤
若是不指定參數也會報錯
關於spring cloud服務的發現註冊的使用就簡單講到這裏,文章能夠幫助沒有了解spring cloud的新手上路,讓你簡單瞭解他如何使用,集中組件在寫demo的時候你會發現什麼樣的更適合你,實際應用還須要更深刻的瞭解咱們所使用的組件。對於技術的學習我我的的習慣是先簡單使用,再深化。文章只是對spring cloud組件的簡單使用,在寫過的demo中會發現spring cloud提供了不少組件來幫咱們完成一樣的事情,在咱們實際應用中應該如何選擇,這就是咱們逐漸對組件深化的過程,而後看一下spring cloud作了什麼,爲何須要咱們這麼使用,這就是我在瞭解一個技術的過程。文章的最後仍是想說,雖然文章很簡單,但也會存在不少不足的地方,但願你們不吝指教。