原创
Eureka的使用以及配置
温馨提示:
本文最后更新于 2018年06月01日,已超过 2,324 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
1.pom.xml依赖
<?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>
<!--parent是SpringBoot的父依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.lzhpo</groupId>
<artifactId>eureka_server_01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka_server_01</name>
<description>Demo project for Spring Boot</description>
<properties>
<!--使用Java8版本-->
<java.version>1.8</java.version>
<!--SpringCloud的版本-->
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<!--eureka-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--SpringBoot的测试-->
<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>
<!--SpringBoot的Maven插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.配置文件application.yml
和启动类注解@EnableEurekaServer
单机版
启动类加上注解@EnableEurekaServer
。
server:
# Eureka的启动端口
port: 8761
spring:
application:
# 服务名称
name: eureka_server
eureka:
instance:
# Eureka-Server的实例名称
hostname: localhost
# 当应用程序向eureka注册时,它将使用其IP地址而不是其主机名
prefer-ip-address: true
client:
# 是否注册自己到Eureka中作为服务,默认为true( registerWithEureka 和 fetchRegistry 都为false说明明自己是个服务端 )
registerWithEureka: false
# 指示此客户端是否应从Eureka服务器获取Eureka注册表信息,默认为true
fetchRegistry: false
serviceUrl:
# 要注册到Eureka的服务注册的地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
################################# 以下建议开发环境配置 #################################
server:
# 禁用自我保护模式(生产模式不建议关闭,开发模式中随意)
enable-self-preservation: false
# 等待2秒没心跳自动剔除
eviction-interval-timer-in-ms: 2000
集群版
Windows的hosts文件添加:
127.0.0.1 cloud.eureka01.com
127.0.0.1 cloud.eureka02.com
eureka_server_ha_01
启动类加上注解@EnableEurekaServer
。
server:
# Eureka的启动端口
port: 8861
spring:
application:
# 服务名称
name: eureka_server_ha
eureka:
instance:
# Eureka-Server的实例名称
hostname: cloud.eureka01.com
# 当应用程序向eureka注册时,它将使用其IP地址而不是其主机名
prefer-ip-address: true
client:
# 是否注册自己到Eureka中作为服务,默认为true( registerWithEureka 和 fetchRegistry 都为false说明明自己是个服务端 )
registerWithEureka: true
# 指示此客户端是否应从Eureka服务器获取Eureka注册表信息,默认为true
fetchRegistry: true
serviceUrl:
# 要注册到Eureka的服务注册的地址(集群版,你中有我,我中有你)
defaultZone: http://cloud.eureka02.com:8862/eureka/
################################# 以下建议开发环境配置 #################################
server:
# 禁用自我保护模式(生产模式不建议关闭,开发模式中随意)
enable-self-preservation: false
# 等待2秒没心跳自动剔除
eviction-interval-timer-in-ms: 2000
eureka_server_ha_02
启动类加上注解@EnableEurekaServer
。
server:
# Eureka的启动端口
port: 8862
spring:
application:
# 服务名称
name: eureka_server_ha
eureka:
instance:
# Eureka-Server的实例名称
hostname: cloud.eureka02.com
# 当应用程序向eureka注册时,它将使用其IP地址而不是其主机名
prefer-ip-address: true
client:
# 是否注册自己到Eureka中作为服务,默认为true( registerWithEureka 和 fetchRegistry 都为false说明明自己是个服务端 )
registerWithEureka: true
# 指示此客户端是否应从Eureka服务器获取Eureka注册表信息,默认为true
fetchRegistry: true
serviceUrl:
# 要注册到Eureka的服务注册的地址(集群版,你中有我,我中有你)
defaultZone: http://cloud.eureka01.com:8861/eureka/
################################# 以下建议开发环境配置 #################################
server:
# 禁用自我保护模式(生产模式不建议关闭,开发模式中随意)
enable-self-preservation: false
# 等待2秒没心跳自动剔除
eviction-interval-timer-in-ms: 2000
注意事项
集群版关闭了自我保护模式enable-self-preservation
和自动剔除指定时间没有心跳的服务eviction-interval-timer-in-ms
。
先启动的可能会报错com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
,
这个是不影响的,发现注册中心之后就会恢复正常。
简单了解一下@EnableEurekaServer
注解
加上@EnableEurekaServer
注解表示启动一个服务注册中心。
package com.lzhpo.eureka_server_01;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer //启动一个服务注册中心
public class EurekaServer01Application {
public static void main(String[] args) {
SpringApplication.run(EurekaServer01Application.class, args);
}
}
@EnableEurekaServer
注解:@Import(EurekaServerMarkerConfiguration.class)
激活@EnableEurekaServer
注解
package org.springframework.cloud.netflix.eureka.server;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Import;
/**
* Annotation to activate Eureka Server related configuration.
* {@link EurekaServerAutoConfiguration}
*
* @author Dave Syer
* @author Biju Kunjummen
*
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(EurekaServerMarkerConfiguration.class)
public @interface EnableEurekaServer {
}
EurekaServerMarkerConfiguration
类:
负责添加一个标记eurekaServerMarkerBean
的bean来激活@EnableEurekaServer
注解。
package org.springframework.cloud.netflix.eureka.server;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Responsible for adding in a marker bean to activate
* {@link EurekaServerAutoConfiguration}.
*
* @author Biju Kunjummen
*/
@Configuration
public class EurekaServerMarkerConfiguration {
@Bean
public Marker eurekaServerMarkerBean() {
return new Marker();
}
class Marker {
}
}
Eureka的自我保护机制
eureka管理后台出现一串红色字体:是警告,说明有服务上线率低EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
- 如果开启了Eureka的自我保护机制(默认是开启的),当一个注册在Eureka注册中心的服务挂掉之后,Eureka注册中心不会剔除这个挂掉的服务,而是会将数据保存下来,当这个挂掉的服务恢复正常之后,还可以自动恢复之前的数据。
- 如果关闭了Eureka的自我保护机制,那么这个服务挂了之后就直接被Eureka注册中心剔除了,就算是此服务恢复正常了,之前的数据也没了。
- 本文标签: Eureka SpringCloud SpringBoot
- 本文链接: http://www.lzhpo.com/article/22
- 版权声明: 本文由lzhpo原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权