目錄
從零搭建一個SpringCloud項目之Eureka搭建
一、父項目創建
-
在idea上點擊new->project創建一個新項目,並刪除他的src目錄(父項目不需要寫代碼)。
-
在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>
- 父項目主要進行版本控制和項目聚合
二、 搭建一個Eureka Server
- 引入pom文件
<dependencies>
<!-- Eureka的服務端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
- 加啟用注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaStudyApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaStudyApplication.class,args);
}
}
- 編寫配置文件
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/
- 啟動項目
輸入地址http://localhost:9000/ ,出現界面,完成。
三、 搭建一個Eureka Client
- 新建一個工程,引入如下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>
- 在啟動類上加注解
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class,args);
}
}
- 編寫配置文件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
- 啟動項目,打開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不再裸奔
服務端:
- 在Eureka Server的pom文件中加入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 修改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/
- 增加配置文件
/**
* @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();
}
}
客戶端:
- 客戶端需要修改配置
security.login.username=root
security.login.pass=123456789
eureka.client.service-url.defaultZone=http://${security.login.username}:${security.login.pass}@localhost:9000/eureka/
六、配置信息總結
Eureka配置的重要信息總結:
- eureka.client.register-with-eureka=false
表示是否向注冊中心注冊自己,非集群環境下設置為false
- eureka.client.fetch-registry=false
表示是否從Eureka Server獲取注冊信息,默認為true。 如果這是一個單點的 Eureka Server,不需要同步其他節點的數據,可以設為false
- eureka.instance.lease-renewal-interval-in-seconds=30(默認)
心跳秒數設置,30秒就告訴eureka server一聲我還活着
- eureka.instance.lease-expiration-duration-in-seconds=90(默認)
過期時間,90秒還沒收到你的心跳,就把你剔除掉
- eureka.client.registry-fetch-interval-seconds=30
客戶端緩存的注冊信息的刷新時間(此配置生效的前提是eureka.client.fetch-registry=true)
- Eureka自我保護功能
默認情況下,如果Eureka Server在90秒內未接收到某個微服務實例的心跳請求,那么它就會被剔除掉。但是試想如果Eureka Server和微服務實例處於兩個網絡環境中,當他們倆網絡突然之間不能連接時,那么豈不是所有的微服務實例都被剔除了。所以設計了一個自我保護功能。即當短時間內丟失過多客戶端時,Eureka Server會自動保護注冊表中的微服務實例,不會剔除掉他們。
項目git地址:
https://github.com/mmcLine/spring-cloud-study/tree/master