Spring-cloud微服務實戰【二】:eureka註冊中心(上)

前言

  本系列教程旨在爲你們演示如何一步一步構建一整套微服務系統,至於其中的數據庫用什麼,訂單ID如何保持惟一,分佈式相關問題等等不在咱們討論範圍內,本教程爲了方便你們後續下載代碼運行測試,不依賴任何其餘諸如緩存、數據庫之類的資源,此類操做咱們在項目中使用代碼的方式來模擬。git

  咱們的實戰過程會教童鞋們一步一步進行演化,讓童鞋們瞭解一個微服務的開發流程:
  1.建立兩個用於演示的springboot項目,用於後續將其演化爲兩個微服務.
  2.使用Eureka註冊中心進行服務治理.
  3.使用Ribbon進行負載均衡.
  4.整合Feign接口服務.
  5.服務降級與熔斷Hystrix.
  6.API網關zuul進行路由.
  7.使用config配置中心.github

建立演示服務

  在本實戰教程中,咱們會模擬一個最簡單的業務場景:生產者生產商品,消費者消費商品,這會涉及兩個服務,生產者和消費者,所以咱們須要先建立這兩個服務.爲方便演示,我將他們放到一個maven工程中。 首先建立該maven工程:
filespring

等待建立完成:數據庫

file

而後建立一個生產者,該生產者是一個springboot項目:
file瀏覽器

點擊next:
file緩存

繼續點擊next:
file安全

生產者就生成好了,接下來,咱們把該模塊加入父項目:
filespringboot

而後實現生產者相關代碼:
fileapp

其中的數據庫操做咱們使用map來模擬:
file負載均衡

在application.properties中配置一下服務端口號:
file

而後啓動項目看一下:
file

生產者就完成了. 接下來是消費者項目,一樣建立一個springboot項目:
file
file
file

一樣歸入父工程項目:
file

而後編寫相關代碼:在消費者端,咱們使用spring RestTemplate和生產者進行通訊: 首先須要配置一下restTemplate:
file

而後編寫controller:
file

注意:在consumer項目中也須要使用Product對象,本文直接從producer項目中拷貝過來:
file

實際生產中根據業務須要,有可能須要根據返回字段構造一結果個對象,也有可能讓調用的服務提供方提供jar包.

在appilication.properties配置一下啓動端口:
file

而後咱們去瀏覽器訪問一下試一下:
file

能夠看到,在消費者端的代碼已經經過restTemplate訪問到生產者提供的接口.

使用spring-security進行用戶認證

  接下來,咱們思考一個問題:假如咱們的接口須要對公網開放,若是對接口不加任何限制,任何人都能訪問,是否是不安全呢?所以,咱們須要添加一個認證小模塊.該模塊咱們使用spring-security來實現,首先添加依賴:
file

而後在配置文件中新增相關信息:
file

而後重啓生產者服務,訪問瀏覽器,此時瀏覽器提示須要登錄,帳號密碼就是咱們在配置文件中配置的信息:
file

輸入配置文件中配置的帳號密碼就能成功訪問了:
file

此時,咱們再來訪問consumer項目試一試:
file

頁面提示信息說認證失敗,所以,咱們還須要修改consumer項目的代碼,新增一個httpheaders頭信息,添加帳號密碼進行認證:
file

而後修改controller層代碼:
file

而後再重啓訪問瀏覽器:
file

此時咱們又能在consumer中訪問到producer的接口了.

spring-security抽象

  設想一下,假如咱們有數十甚至上百個微服務,難道要在每個模塊中都設置這樣的帳號密碼?答案確定是否認的,通常來講,一個微服務系統中的全部微服務都使用相同的用戶名和密碼進行認證,咱們能夠將認證功能單獨抽出來造成一個模塊,而後再集成到須要進行認證的微服務中去,所以咱們再新建一個模塊:

file
file

建立項目完成後,首先新增pom.xml依賴:
file

整個項目結構以下:
file

resources目錄下沒有任何文件,接下來看看最重要的WebSecurityConfiguration:
file

首先使用@Configuration標識它是一個配置類,須要被spring容器掃描.

其次@EnableWebSecurity標誌啓用WebSecurity安全相關的功能.

最後是繼承自WebSecurityConfigurerAdapter,從名字咱們能夠看出,該類採用了適配器模式,主要做用是進行安全相關的配置,有興趣的童鞋能夠詳細去了解一下,在此咱們主要演示spring-cloud,就再也不過多贅述.

把該模塊加入父項目:
file

接下來,咱們須要修改producer項目的代碼,取消自定義的安全配置,使用dhp-micro-service-auth來替代. 首先修改producer項目的pom.xml:
file

而後去掉application.properties中的配置:
file

接下來再啓動producer項目,使用瀏覽器進行訪問:
file

輸入帳號密碼,認證成功後能正常訪問:
file

此時,再啓動consumer項目訪問:
file

說明咱們的公共驗證模塊成功應用到了producer項目,後續再有新的微服務須要用戶認證,直接引入該模塊便可. 自此,咱們須要的服務都有了.文末,請童鞋們思考一下,本文中consumer訪問producer的方式有什麼問題?咱們會在下一篇文章來解答這個問題.

本文的github地址

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索