【微服務架構】SpringCloud之Eureka(服務註冊和服務發現基礎篇)(二)

NO IMAGE

上篇文章講解了SpringCloud元件和概念介紹,接下來講解一下SpringCloud元件相關元件使用、原理和每個元件的作用的,它主要提供的模組包括:服務發現(Eureka),斷路器(Hystrix),智慧路有(Zuul),客戶端負載均衡(Ribbon),Archaius,Turbine等  今天學習的是Eureka即註冊中心

 

一:Eureka簡介

 

   Eureka是Spring Cloud Netflix的一個子模組,也是核心模組之一。用於雲端服務發現,一個基於REST的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移。

服務註冊與發現對於微服務系統來說非常重要。有了服務發現與註冊,你就不需要整天改服務呼叫的配置檔案了,你只需要使用服務的識別符號,就可以訪問到服務。他的功能類似於dubbo的註冊中心(register)。

   服務發現:服務發現是微服務基礎架構的關鍵原則之一。試圖著手配置每個客戶端或某種格式的約定可以說是非常困難的和非常脆弱的。Eureka是Netflix服務發現的一種服務和客戶端。這種服務是可以被高可用性配置的和部署,並且在註冊的服務當中,每個服務的狀態可以互相複製給彼此。  

   服務註冊:當一個客戶端註冊到Eureka,它提供關於自己的後設資料(諸如主機和埠,健康指標URL,首頁等)Eureka通過一個服務從各個例項接收心跳資訊。如果心跳接收失敗超過配置的時間,例項將會正常從註冊裡面移除

   

 下圖是基本的服務註冊和發現

   

二:Eureka服務發現和註冊(建立註冊中心)

   

    1:建立一個基礎的Spring Boot工程,並在pom.xml中引入需要的依賴內容

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
 
        <groupId>com.demo.springcloud</groupId>
        <artifactId>eureka_register_service</artifactId>
        <version>1.0.0</version>
        <packaging>jar</packaging>
 
        <name>eureka_register_service</name>
        <description>Spring Cloud project</description>
 
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.3.RELEASE</version>
            <relativePath /> 
        </parent>
 
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <java.version>1.8</java.version>
        </properties>
 
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
 
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka-server</artifactId>
            </dependency>
         
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>
        </dependencies>
 
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Brixton.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
 
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
 
    </project>   
     
    

 

 2:建立一個啟動類Application

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.demo.springcloud;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
 
 @EnableEurekaServer
 @SpringBootApplication
 public class Application {
   public static void main(String[] args) {
       SpringApplication.run(Application.class, args);
   }
 
 }

 

 

 通過@EnableEurekaServer註解啟動一個服務註冊中心提供給其他應用進行對話。

 

 3:建立一個配置檔案 application.properties,注意不要出現空格,否啟動報錯

1
2
3
4
 server.port=8000
 eureka.client.register-with-eureka=false
 eureka.client.fetch-registry=false
 eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

 

 4:執行bluid.sh進行構建,然後執行main方法。本人由於在eclipse下沒有進行手動編譯,啟動的時候一直讀取不到application.properties。

 

 5:檢視註冊中心

 http://127.0.0.1:8000/ 可以看到如下圖

 

 

 是不是很簡單啊,那麼人要問了,為什麼連登陸賬號和密碼都沒有,在外網不是直接能進入註冊中心, 這樣很不安全啊。好,那我們加入登陸賬號和密碼

 

三:Eureka註冊中心加入許可權

 

  1:加入註冊中心需要引入jar,在pom.xml加入

1
2
3
4
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

  2:配置檔案新建一個bootstrap.yml檔案

  

1
2
3
4
5
6
security:
    basic:
      enabled: true
    user:
      name: admin
      password: 123

 

  記得重新編譯打包然後執行main方法。

   

四:註冊一個服務

 

   首先要去掉註冊中心加入的許可權,不然服務端會連結不上註冊中心進行註冊的,本人還不知怎麼配服務端連線註冊中心賬號和密碼的配置。

   建立一個biz-serice-0的工程服務,相關程式碼我不在這裡說明,可以直接git下載 https://github.com/zhp8341/SpringCloudDemo

 

   

 

執行demo應該能看上面的結果,下圖是註冊中心找到的服務BIZ-SERVICE-0,上圖是服務暴露的介面

   

   下一講講解註冊中心的高可用,我們現在使用的是單一得,容易造成單點故障!!!