1. 程式人生 > >Spring Cloud Eureka(二):Eureka 註冊中心體驗

Spring Cloud Eureka(二):Eureka 註冊中心體驗

1、Eureka 簡述

本文主要從應用角度體驗一下注冊中心的搭建和使用,後文會由淺入深學習Spring Cloud Eureka 的各種原理和機制。

Spring Cloud Eureka 是 Spring Cloud Netflix 元件的一部分,而 Spring Cloud Netflix 又是基於 netflix 的 eureka 封裝,所以最終的原始碼實現在於 eureka 中。廢話不多說,先上手體驗一下,後文在一步步深入瞭解。

2、Eureka Server 服務端搭建

1、建立專案,新增 maven 依賴

<modelVersion>4.0.0</modelVersion>

    <artifactId>lkf-cloud-eureka</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>lkf-cloud-eureka</name>
    
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    </properties>

<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

2、建立啟動類,啟用註冊中心服務 @EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

	public static void main(String[] args) {		SpringApplication.run(EurekaApplication.class, args);
	}
}

3、新增配置檔案 appication

server.port=8888
eureka.instance.hostname=localhost
#由於該應用為註冊中心,所以設定為false,代表不向註冊中心註冊自己
eureka.client.register-with-eureka=false
#由於註冊中心的職責就是維護服務例項,它並不需要去檢索服務,所以也設定為false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
eureka.server.wait-time-in-ms-when-sync-empty=0
#eureka.instance.prefer-ip-address=true
#eureka.instance.ip-address=127.0.0.1

spring.application.name=lkf-cloud-eureka
spring.cloud.config.uri=${CONFIG_SERVER_URL:http://localhost:8888}

4、啟動 Eureka Server 服務

啟動應用,訪問http://localhost:8888/,可以看到 Eureka Server 自帶的 UI 管理介面。

在這裡插入圖片描述

3、Eureka Client 客戶端搭建

1、建立專案 lkf-eureka-client,新增maven 依賴

    <modelVersion>4.0.0</modelVersion>

    <artifactId>lkf-eureka-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>lkf-eureka-client</name>
    
     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    </properties>
    
     <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    
     <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</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>

這裡如果沒有引用 spring-boot-starter-web 會報以下錯誤:

Destroy method on bean with name 'scopedTarget.eurekaClient' threw an exception: org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'eurekaInstanceConfigBean': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)

2、建立啟動類,啟用 @EnableDiscoveryClient 或 @EnableEurekaClient

/**
 * @author kaifeng
 */
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {

    public static void main(String[] args) {
    SpringApplication.run(EurekaClientApplication.class, args);
    }
}

3、新增配置檔案

server.port=8001
spring.application.name=lkf-eureka-client
eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka/

4、啟動服務,訪問註冊中心

在這裡插入圖片描述