springcloud使用之服務的注冊發現與消費


  隨着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的學習也沒有應用,在使用新技術搭建項目的過程中萌生了寫這篇文章的想法,鞏固並記錄,雖然有很多這種文章,但也希望我的文章也對你們有一點點的幫助。

  在網上或者一些技術群里經常能看到幾個詞,soa、分布式、微服務,好多人也會問這些有什么區別。我對於他們的理接,soa是一種面向服務架構的方式,分布式是多個項目分布在不同的物理機上解決單體機構壓力過大等一系列問題,微服務強調的是是一種架構風格,早在很早Martin Fowler就發表過一篇關於微服務的博客,他主要強調微服務是一種架構風格,他們之間采用http的輕量級通信,我在網上看到一個中文翻譯過的https://www.jianshu.com/p/4821a29fa998,原文https://martinfowler.com/articles/microservices.html。它們之間也不能說完全有區別,但與不能說他們就是一個東西,它們強調的地方不同。這里話不多說,我們來開始使用spring cloud。

  在使用spring cloud的時候我們發現他又很多版本,它不像其他spring的項目版本的命名,它的版本順序從網上一搜很多介紹,我就不復制過來,還有m、sr等版本就不去介紹了。開始demo之前我們需要先了解一下spring cloud提供的相關組件,Eureka(百度百科):

 

  由百度百科可以知道Eureka,他是netflix的一個服務發現框架,他被spring cloud整合到自己的項目里,他可以幫助我們完成服務的注冊與發現,spring cloud還提供了其他的組建consul,因為spring將他們封裝我們只需要添加一個注解將pom文件引入啟動器就可以使用,這里我們使用Eureka來寫demo,我們先來創建項目,我們可以通過https://start.spring.io/來創建項目導入編輯器,這里我們使用工具直接快速創建,原理還是去訪問前面的地址幫我們創建項目:

  打開idea,file-->new-->project

  

  

  

  在我們的主啟動類添加注解

  @EnableEurekaServer注解意思代表我們使用Eureka作為服務注冊中心,默認情況它會把自己當作服務注冊到注冊中心,我們需要在配置文件禁用該功能
  
  然后我們啟動項目,訪問項目地址localhost:8881
  

  訪問項目發現現在還沒有服務注冊在上面,接下來我們創建一個服務的提供者並注冊,按照上面的步驟繼續創建項目,在主程序添加注解@EnableDiscoveryClient,這個注解的意思是讓注冊中心發現

  

  配置文件

  

  然后我們編寫一個簡單的求和方法

  

  這里注意我們寫的方法一定是放在主程序包下的,否則訪問不到會提示404

  

 

  啟動項目發現服務的提供者已經注冊上去了

  

  現在服務的注冊中心跟提供者都有了,我們需要在創建一個消費者,消費者調用我們寫好的方法,輸出結果。這篇文章會介紹幾種服務的消費者,先以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做了什么,為什么需要我們這么使用,這就是我在了解一個技術的過程。文章的最后還是想說,雖然文章很簡單,但也會存在很多不足的地方,希望大家不吝指教。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM