從零搭建一個SpringCloud項目之Eureka(一)


從零搭建一個SpringCloud項目之Eureka搭建

一、父項目創建

  1. 在idea上點擊new->project創建一個新項目,並刪除他的src目錄(父項目不需要寫代碼)。

  2. 在pom文件里引入

<?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>
    <modules>
        <module>study-eureka-server</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>

    <groupId>com.mmc</groupId>
    <artifactId>spring-cloud-study</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <description>springcloud 父工程</description>


    <properties>
        <java.version>1.8</java.version>
    </properties>


    <!-- 引入spring-cloud的版本 -->
    <dependencyManagement>

        <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Finchley.SR2</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>
  1. 父項目主要進行版本控制和項目聚合

二、 搭建一個Eureka Server

  1. 引入pom文件
 <dependencies>

        <!-- Eureka的服務端  -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
  1. 加啟用注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaStudyApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaStudyApplication.class,args);
    }
}
  1. 編寫配置文件
server.port=9000
#表示是否注冊到Eureka Server,默認是true,由於當前應用就是Eureka Server,所以填false
eureka.client.register-with-eureka=false
#表示是否注冊到Eureka Server獲取注冊信息
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/
  1. 啟動項目

輸入地址http://localhost:9000/ ,出現界面,完成。

三、 搭建一個Eureka Client

  1. 新建一個工程,引入如下pom文件
 <dependencies>

        <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>
    </dependencies>
  1. 在啟動類上加注解
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class,args);
    }
}
  1. 編寫配置文件application.properties
server.port=8001
#注冊到eureka服務端的微服務名稱
spring.application.name=study-eureka-client
#注冊到eureka服務端的地址
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/
#點擊具體的微服務,是否顯示ip
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=study-eureka-client-8001
  1. 啟動項目,打開http://localhost:9000/,發現客戶端已經注冊上去了。

四、修改為高可用的Eureka Server

修改配置文件為

server.port=9000
#表示是否注冊到Eureka Server,默認是true,由於當前應用就是Eureka Server,所以填false
eureka.client.register-with-eureka=true
#表示是否注冊到Eureka Server獲取注冊信息
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:9001/eureka/


再復制一個Eureka Server項目,配置為:

server.port=9001
#表示是否注冊到Eureka Server,默認是true,由於當前應用就是Eureka Server,所以填false
eureka.client.register-with-eureka=true
#表示是否注冊到Eureka Server獲取注冊信息
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:9000/eureka/


啟動兩個Server項目即可

client端改寫一行配置:

eureka.client.service-url.defaultZone=http://localhost:9000/eureka/,http://localhost:9001/eureka/

五、安全配置,讓你的Eureka不再裸奔

服務端:

  1. 在Eureka Server的pom文件中加入
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
  1. 修改application配置文件,增加如下內容
spring.security.basic.enable=true
spring.security.user.name=root
spring.security.user.password=123456789

eureka.client.service-url.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@localhost:9000/eureka/
  1. 增加配置文件
/**
 * @description:
 * @author: mmc
 * @create: 2020-03-29 16:58
 **/
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.csrf().disable();
    }
}

客戶端:

  1. 客戶端需要修改配置
security.login.username=root
security.login.pass=123456789
eureka.client.service-url.defaultZone=http://${security.login.username}:${security.login.pass}@localhost:9000/eureka/

六、配置信息總結

Eureka配置的重要信息總結:

  1. eureka.client.register-with-eureka=false

表示是否向注冊中心注冊自己,非集群環境下設置為false

  1. eureka.client.fetch-registry=false

表示是否從Eureka Server獲取注冊信息,默認為true。 如果這是一個單點的 Eureka Server,不需要同步其他節點的數據,可以設為false

  1. eureka.instance.lease-renewal-interval-in-seconds=30(默認)

心跳秒數設置,30秒就告訴eureka server一聲我還活着

  1. eureka.instance.lease-expiration-duration-in-seconds=90(默認)

過期時間,90秒還沒收到你的心跳,就把你剔除掉

  1. eureka.client.registry-fetch-interval-seconds=30

客戶端緩存的注冊信息的刷新時間(此配置生效的前提是eureka.client.fetch-registry=true)

  1. Eureka自我保護功能

默認情況下,如果Eureka Server在90秒內未接收到某個微服務實例的心跳請求,那么它就會被剔除掉。但是試想如果Eureka Server和微服務實例處於兩個網絡環境中,當他們倆網絡突然之間不能連接時,那么豈不是所有的微服務實例都被剔除了。所以設計了一個自我保護功能。即當短時間內丟失過多客戶端時,Eureka Server會自動保護注冊表中的微服務實例,不會剔除掉他們。

項目git地址:
https://github.com/mmcLine/spring-cloud-study/tree/master


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM