springBoot簡化了一個工程開發的配置過程,但對於叢集化服務,spring有一套叫做springCloud的解決方案,它利用Spring Boot的開發便利性巧妙地簡化了分散式系統基礎設施的開發,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署。

本文主要講一下springCloud的發現與註冊的配置方案

首先建立一個eureka註冊服務

建立一個maven專案


pom檔案中新增以下配置:

<name>eureka-server</name>
<description>Spring Cloud project</description>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.3.5.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</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>
</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>

結果如下:

在resources中新增application.properties檔案配置如下

server.port=1111
#eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

專案結構如下


如果是application.yml檔案,則配置如下

server:
  port: 1111
eureka:
  client:
# 表示是否註冊自身到eureka伺服器
register-with-eureka: false
    # 是否從eureka上獲取註冊資訊
fetch-registry: false
    service-url:
      defaultZone: http://localhost:${server.port}/eureka/

專案結構如下:



新增專案啟動類 Application 內容如下

@EnableEurekaServer
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
}
}

專案結構如圖所示


執行main方法,以啟動註冊服務


訪問服務:http://localhost:1111/


發現服務已生效,第一部分結束

<!-- -------------------------------分割線-------------------------------------- -->

將springBoot服務註冊進入Eureka

首先將pom檔案中新增配置

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<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>

重新編譯maven專案:


在application配置檔案中配置服務名,以及Eureka服務地址(如圖所示):


程式碼如下:

spring:
    application:
        name: test-Demo
eureka:
    client:
        service-url:
              defaultZone: http://localhost:1111/eureka/

如果是application.properties檔案,則新增以下配置

spring.application.name=compute-service
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

隨後,在啟動類Application中,加入註釋:

@EnableDiscoveryClient

如圖:


OK,啟動服務,重新整理或訪問http://localhost:1111/ 可以看到:


剛才啟動的服務 埠已經註冊到Eureka服務中了。

如果幾個springBoot同時註冊到一個Eureka服務上,就組成了一個springCloud叢集,下一篇將講一下springCloud叢集服務間的呼叫