Spring Cloud 系列(一)Eureka 服務註冊與發現

JayceKon發表於2018-08-04

Spring Cloud 簡介

Spring Cloud 是一個基於Spring Boot 實現的微服務架構開發工具。它為微服務架構中涉及的配置管理、服務治理、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式繪畫和叢集狀態管理等操作提供了一種簡單的開發方式。

Spring Cloud包含了多個子專案(針對分散式系統中涉及的多個不同開源產品),比如:Spring Cloud ConfigSpring Cloud NetflixSpring Cloud CloudFoundrySpring Cloud AWSSpring Cloud SecuritySpring Cloud CommonsSpring Cloud ZookeeperSpring Cloud CLI等專案

服務治理

服務治理可以說是微服務架構中最為核心和基礎的模組,它主要用來實現各個微服務示例的自動化註冊與發現。服務治理主要分為兩步:

  • 服務註冊
  • 服務發現

Spring Cloud Eureka

Spring Cloud Eureka,使用Netfix Eureka 來實現服務註冊與發現,它即包含了服務端元件,也包含了客戶端元件。

Spring Cloud Eureka是Spring Cloud Netflix專案下的服務治理模組。而Spring Cloud Netflix專案是Spring Cloud的子專案之一,主要內容是對Netflix公司一系列開源產品的包裝,它為Spring Boot應用提供了自配置的Netflix OSS整合。通過一些簡單的註解,開發者就可以快速的在應用中配置一下常用模組並構建龐大的分散式系統。它主要提供的模組包括:服務發現(Eureka),斷路器(Hystrix),智慧路由(Zuul),客戶端負載均衡(Ribbon)等

Eureka 服務端

Eureka Server 我們可以稱之為服務註冊中心,它同其他註冊中心一樣,支援高可用配置,常見的註冊中心有:

  • Apache Zookeeper
  • Netflix Eureka
  • Consul

Spring Cloud 系列(一)Eureka 服務註冊與發現

服務註冊中心,即將當前服務狀態註冊到註冊中心,便於其他服務發現以及呼叫。

Eureka ServerEurekaClient 的註冊服務中心,管理所有註冊服務,以及其示例資訊和狀態

相關依賴:org.springframework.cloud:spring-cloud-starter-netflix-eureka-server
啟用服務:@EnableEurekaServer
複製程式碼

Eureka 客戶端

Eureka Client 主要處理服務的註冊與發現。在Spring Cloud 官方文件中這樣描述:

Service Discovery is one of the key tenets of a microservice based architecture. Trying to hand configure each client or some form of convention can be very difficult to do and can be very brittle. Eureka is the Netflix Service Discovery Server and Client. The server can be configured and deployed to be highly available, with each server replicating state about the registered services to the others.

摳腳翻譯:

服務發現 是微服務體系結構中非常關鍵的一個環節。嘗試通過手動去管理配置每個客戶端或著相關協議是非常困難的一件事。Eureka 是 Netflix服務的服務端與客戶端。它可以配置和部署伺服器使其具有高可用性,並且將每個服務的註冊狀態同步到其他伺服器中。

Spring Eureka Server

接下來我們手動操作一把,通過Idea 快速建立一個 Eureka Server 服務註冊中心。

服務名:spring-cloud-eureka

我們在構建服務時,建立基於Spring Boot 的程式 ,詳情參考傳送門

1、Maven 依賴

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>
...

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
...
複製程式碼

在專案依賴方面,Spring Cloud Eureka 服務端非常簡單,主要是基於Spring Boot,其次引入 spring-cloud-starter-netflix-eureka-server 即可

2、SpringCloudEurekaApplication

啟動類需要加上 @EnableEurekaServer 進行服務註冊中心啟動

@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaApplication.class, args);
    }
}
複製程式碼

3、application.properties

相關配置資訊:

//服務埠
server.port=8761
//eureka 服務地址
eureka.instance.hostname=localhost
//是否將當前服務註冊到 Eureka 註冊中心
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false
//服務地址
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
//服務名稱
spring.application.name=eureka-server
複製程式碼

4、啟動服務

服務啟動後,開啟地址:http://localhost:8761/

Spring Cloud 系列(一)Eureka 服務註冊與發現

我們可以看到,目前並沒有服務註冊到我們的註冊中心中。

Spring Eureka Client

1、Maven 依賴

與服務端不同,這裡引入的依賴為:spring-cloud-starter-netflix-eureka-client

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
複製程式碼

2、SpringCloudEurekaClientApplication

@EnableEurekaClient 該註解能啟用Eureka中的DiscoveryClient實現,這樣才能實現Controller中對服務資訊的輸出。

@SpringBootApplication
@EnableEurekaClient
public class SpringCloudEurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudEurekaClientApplication.class, args);
    }
}
複製程式碼

3、application.properties

server.port=8762
//服務名稱
spring.application.name = jaycekon-hi

//服務註冊中心地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

複製程式碼

4、啟動服務

服務啟動後,開啟地址:http://localhost:8761/

Spring Cloud 系列(一)Eureka 服務註冊與發現

我們可以看到,服務已經成功註冊到Eureka Server 中。

總結

原始碼地址:https://github.com/jaycekon/Spring-Cloud

參考資料:

  • https://cloud.spring.io/spring-cloud-static/Dalston.SR5/single/spring-cloud.html#_service_discovery_eureka_clients
  • http://blog.didispace.com/spring-cloud-starter-dalston-1/
  • https://segmentfault.com/l/1500000011386051/play

相關文章