eureka知识梳理与环境搭建

一、 什么是eureka
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

Eureka包含两个组件:Eureka Server和Eureka Client。
调用关系说明:
1.服务提供者在启动时,向注册中心注册自己提供的服务。
2.服务消费者在启动时,向注册中心订阅自己所需的服务。
3.注册中心返回服务提供者地址给消费者。
4.服务消费者从提供者地址中调用消费者。
注意! 下面的服务端指:注册中心,客户端指:服务提供者和消费者
Eureka Server:提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,包括主机与端口号、服务版本号、通讯协议等。这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka服务端支持集群模式部署,首尾相连形成一个闭环即可,集群中的的不同服务注册中心通过异步模式互相复制各自的状态,这也意味着在给定的时间点每个实例关于所有服务的状态可能存在不一致的现象。
eureka客户端,主要处理服务的注册和发现。客户端服务通过注册和参数配置的方式,嵌入在客户端应用程序的代码中。在应用程序启动时,Eureka客户端向服务注册中心注册自身提供的服务,并周期性的发送心跳来更新它的服务租约。同时,他也能从服务端查询当前注册的服务信息并把它们缓存到本地并周期行的刷新服务状态。
服务调用
服务消费者在获取服务清单后,通过服务名可以获取具体提供服务的实例名和该实例的元数据信息。因为有这些服务实例的详细信息,所以客户端可以根据自己的需要决定具体调用哪个实例,在Ribbon中会默认采用轮询的方式进行调用,从而实现客户端的负载均衡。

二、 Eureka架构设计
Eureka包括两个端:
• Eureka Server:注册中心服务端,用于维护和管理注册服务列表。
• Eureka Client:注册中心客户端,向注册中心注册服务的应用都可以叫做Eureka Client(包括Eureka Server本身)。

上图为Eureka官方wiki的架构图。
Eureka Server:表示注册中心集群
us-east-xxx:表示集群所在的区域
Application Service:表示服务提供者
Application Client:表示服务消费者
Eureka Client:表示Eureka客户端
如图所示,现在有三个区us-east-1c,us-east-1d,us-east-1e,每个区里都有一个Eureka Server集群,以及不定的Application Service和Application Client。
同区域的服务注册与调用过程
us-east-1c区域代表了同区域内的服务注册与调用过程。

  1. Application Service启动后向Eureka Server注册中心注册服务,包括IP、Port、服务名等信息。
  2. Application Client启动后从Eureka Server拉取注册列表。
  3. Application Client发起远程调用的时候优先调用本区域内的Application Service。如果本区内没有可用的Application Service,才会发起对其他区内的Service调用。
    不同区域的服务注册与调用过程
    三个区域us-east-1c,us-east-1d,us-east-1e结合在一起代表了不同区域内的服务注册与调用过程。
  4. us-east-1c内的Application Service启动后,向本区内的Eureka Server注册服务信息。并跟本区内的Eureka Server维持心跳续约。
  5. Eureka Server会将服务信息同步至相邻的us-east-1d的Eureka Server以及us-east-1e的Eureka Server
  6. us-east-1e内的Application Service启动后,向本区内的Eureka Server注册服务信息。并跟本区内的Eureka Server维持心跳续约。
  7. Eureka Server会将服务信息同步至相邻的us-east-1d的Eureka Server以及us-east-1c的Eureka Server
  8. us-east-1d内的Application Client启动后,从本区内的Eureka Server拉取注册列表。
  9. us-east-1d内的Application Client发起远程调用时,会先检索本区有没有可用的Application Service,如果没有就会通过某种算法调用us-east-1c或us-east-1e中的Application Service服务。
    服务续约、下线、剔除
    服务续约
    Application Service内的Eureka Client后台启动一个定时任务,跟Eureka Server保持一个心跳续约任务,每隔一段时间(默认30S)向Eureka Server发送一次renew请求,进行续约,告诉Eureka Server我还活着,防止被Eureka Server的Evict任务剔除。
    服务下线
    Application Service应用停止后,向Eureka Server发送一个cancel请求,告诉注册中心我已经退出了,Eureka Server接收到之后会将其移出注册列表,后面再有获取注册服务列表的时候就获取不到了,防止消费端消费不可用的服务。
    服务剔除
    Eureka Server启动后在后台启动一个Evict任务,对一定时间内没有续约的服务进行剔除。
    值得注意的是,注册、续约、下线的请求默认优先选择本区域内的Eureka Server,只有当本区内的Eureka Server都不可用,才会选择其他区的Eureka Server。
    服务通讯方式
    服务间使用标准的REST方式通讯,所以Eureka服务注册中心并不仅适用于Java平台,其他平台也可以纳入到服务治理平台里面。只不过其他平台需要根据协议实现不同的客户端。目前已知实现的有net、nodejs、python。

三、 Eureka系列之服务部署、搭建、使用

注册中心搭建
准备Eureka服务端程序文件
进入SpringBoot项目生成器,生成Eureka服务端工程代码。
地址:https://start.spring.io/

修改application.properties文件,配置如下:

修改启动类RegisterCenterApplication:

用maven打包工程为jar文件
启动工程

登录控制台,至此注册程序程序准备完毕。

部署到linux服务器–安装JDK
从跳板机复制jdk文件到指定机器

解压JDK压缩包

配置jdk环境变量,在/etc/profile文件中加入
JAVA_HOME=/opt/java/jdk1.8.0_181
PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
重新连接,查看版本号

部署到linux服务器—部署&启动
将打好的jar包上传到服务器目录/opt/havery/springCloud。
如果不能直接连接服务器,可将jar包放到跳板机,再从跳板机复制(scp)到自己的服务器。
启动服务

访问控制台

服务提供&注册
创建服务提供&注册程序工程,主要依赖

修改application.properties文件,配置如下:

修改启动类ServiceProviderApplication

实现一个rest服务

用maven打包工程为jar文件
启动服务实现注册

进入eureka注册中心控制台。在Instances中看到已经注册的实例表示服务注册成功。

服务调用
创建服务调用应用程序,主要依赖。需要说明的是这里使用了openfeign实现对eureka服务的调用,依赖的openfeign版本需特别指定,不能使用spring-cloud-dependencies统一版本。

修改application.properties文件,配置如下:

修改启动类ServiceConsumerApplication

实现一个远程服务的定义

实现远程服务调用

启动服务调用应用程序

访问服务调用应用程序

四、 Eureka集群高可用配置
 运行两个服务器,两个服务提供者实例和一个服务调用者实例,通过服务调用者请求服务,实现集群部署并通过HttpClient的REST客户端访问服务调用者发布的服务看到负载均衡的效果。
集群结构图
  
  由于本例的开发环境只有一台电脑,操作系统为Windows,如果要构建集群,需要修改hosts文件,为其添加主机名的映射,修改C:\Windows\System32\drivers\etc\hosts文件,添加以下内容:
  127.0.0.1 slave1 slave2
2.构建服务器端
  新建一个maven项目first-cloud-server,项目的目录结构如下图
  
  引入相关依赖
  pom.xml代码清单

1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns=“http://maven.apache.org/POM/4.0.0”
3 xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
4 xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
5 4.0.0
6
7 com.triheart
8 first-cloud-server
9 1.0-SNAPSHOT
10
11
12
13
14 org.springframework.cloud
15 spring-cloud-dependencies
16 Dalston.SR1
17 pom
18 import
19
20
21
22
23
24
25 org.springframework.cloud
26 spring-cloud-starter-eureka-server
27
28
29
30

编写配置文件,由于对同一个应用程序需要启动两次(IDEA启动多次应用程序),因此需要在配置文件中使用spring的profiles配置,配置文件的代码清单如下

1 server:
2 port: 8761
3 spring:
4 application:
5 name: first-cloud-server
6 profiles: slave1
7 eureka:
8 instance:
9 hostname: slave1
10 client:
11 serviceUrl:
12 defaultZone: http://slave2:8762/eureka/
13 —
14 server:
15 port: 8762
16 spring:
17 application:
18 name: first-cloud-server
19 profiles: slave2
20 eureka:
21 instance:
22 hostname: slave2
23 client:
24 serviceUrl:
25 defaultZone: http://slave1:8761/eureka/

在配置文件中配置了两个profiles,名称分别为slave1和slave2。在slave1中,配置应用端口为8761,主机名为slave1,当实用slave1这个profiles来启动服务器时,将会向http://slave2:8762/eureka/注册自己;同理,使用slave2的profiles来启动服务器时,会像slave1这台服务器注册自己。简单地说,就是两个服务器启动之后,他们会互相注册。
  编写启动类FirstServer.java,让其在启动时读取控制台的输入来决定使用哪个profiles来启动相应的Eureka服务。
  FirstServer.java代码清单

1 package firstcloudprovider;
2
3 import org.springframework.boot.autoconfigure.SpringBootApplication;
4 import org.springframework.boot.builder.SpringApplicationBuilder;
5 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
6
7 import java.util.Scanner;
8
9 /**
10 * @author 阿遠
11 * Date: 2018/8/24
12 * Time: 15:17
13 */
14 @SpringBootApplication
15 @EnableEurekaServer
16 public class FirstServer {
17
18 public static void main(String[] args) {
19 Scanner scan = new Scanner(System.in);
20 String profiles = scan.nextLine();
21 new SpringApplicationBuilder(FirstServer.class).profiles(profiles).run(args);
22 }
23 }

在启动类中,先从控制台输入profiles的值,再根据输入的值启动相应的Eureka服务器,需要注意的是,当我们启动第一个服务器时会抛异常,这是因为我们第一个服务器会去找第二个服务器来注册自己,而我们的第二个服务器还没有启动,我们把第二个服务器启动之后,分别访问http://slave1:8761和http://slave2:8762,可以在Eureka服务器的控制台上看到,两个服务器已经相互注册了 。

3.构建服务提供者
  服务提供者也需要启动两个实例,其构建与服务器的构建类似。新建一个maven项目first-cloud-provider,项目的目录结构如下

在pom.xml文件中引入相关依赖。
  pom.xml代码清单

1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns=“http://maven.apache.org/POM/4.0.0”
3 xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
4 xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
5 4.0.0
6
7 com.triheart
8 first-cloud-provider
9 1.0-SNAPSHOT
10
11
12
13
14 org.springframework.cloud
15 spring-cloud-dependencies
16 Dalston.SR1
17 pom
18 import
19
20
21
22
23
24
25 org.springframework.cloud
26 spring-cloud-starter-config
27
28
29 org.springframework.cloud
30 spring-cloud-starter-eureka
31
32
33

编写配置文件,将Eureka客户端的两个服务提供者注册到Eureka服务器。
  配置文件application.yml代码清单

1 spring:
2 application:
3 name: first-cloud-provider
4 eureka:
5 instance:
6 hostname: localhost
7 client:
8 serviceUrl:
9 defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/

编写启动类,由于默认端口只有8080,而我们有两个服务提供者,为了避免端口冲突,我们让启动类启动时从控制台读取输入的端口来决定使用哪个端口提供服务。
  启动类FirstServiceProvider.java代码清单

1 package com.triheart.firstcloudprivider;
2
3 import org.springframework.boot.autoconfigure.SpringBootApplication;
4 import org.springframework.boot.builder.SpringApplicationBuilder;
5 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
6
7 import java.util.Scanner;
8
9 /**
10 * @author 阿遠
11 * Date: 2018/8/24
12 * Time: 16:42
13 */
14 @SpringBootApplication
15 @EnableEurekaClient
16 public class FirstServiceProvider {
17
18 public static void main(String[] args) {
19 // 读取控制台输入的端口,避免端口冲突
20 Scanner scan = new Scanner(System.in);
21 String port = scan.nextLine();
22 new SpringApplicationBuilder(FirstServiceProvider.class).properties(“server.port=” + port).run(args);
23 }
24 }

为了看到服务提供者提供的服务,我们还需要编写控制器来供后面的服务调用者调用。
  实体类Person.java代码清单

1 package com.triheart.firstcloudprivider.entity;
2
3 public class Person {
4
5 private Integer id;
6
7 private String name;
8
9 private Integer age;
10
11 private String message;
12
13 public Person() {
14 super();
15 }
16
17 public Person(Integer id, String name, Integer age) {
18 super();
19 this.id = id;
20 this.name = name;
21 this.age = age;
22 }
23
24 public Integer getId() {
25 return id;
26 }
27
28 public void setId(Integer id) {
29 this.id = id;
30 }
31
32 public String getName() {
33 return name;
34 }
35
36 public void setName(String name) {
37 this.name = name;
38 }
39
40 public Integer getAge() {
41 return age;
42 }
43
44 public void setAge(Integer age) {
45 this.age = age;
46 }
47
48 public String getMessage() {
49 return message;
50 }
51
52 public void setMessage(String message) {
53 this.message = message;
54 }
55
56 }

控制器FirstController.java代码清单

1 package com.triheart.firstcloudprivider.controller;
2
3 import javax.servlet.http.HttpServletRequest;
4
5 import com.triheart.firstcloudprivider.entity.Person;
6 import org.springframework.http.MediaType;
7 import org.springframework.web.bind.annotation.PathVariable;
8 import org.springframework.web.bind.annotation.RequestMapping;
9 import org.springframework.web.bind.annotation.RequestMethod;
10 import org.springframework.web.bind.annotation.RestController;
11
12 @RestController
13 public class FirstController {
14
15 @RequestMapping(value = “/person/{personId}”, method = RequestMethod.GET,
16 produces = MediaType.APPLICATION_JSON_VALUE)
17 public Person findPerson(@PathVariable(“personId”) Integer personId, HttpServletRequest request) {
18 Person person = new Person(personId, “Crazyit”, 30);
19 // 为了查看结果,将请求的URL设置到Person实例中
20 person.setMessage(request.getRequestURL().toString());
21 return person;
22 }
23 }

控制器的findPerson方法将请求的服务URL保存到Person对象的message属性中,因此在调用服务后我们可以根据message属性来查看我们请求的URL。
  我们将启动类启动两次,分别在控制台输入端口8080和8081,然后分别访问http://slave1:8761和http://slave1:8762,可以看到first-cloud-provider这个服务已经被注册到slave1和slave2这两个Eureka服务器里面了。

4.构建服务调用者
  服务调用者只需启动一个实例。新建一个maven项目first-cloud-invoker,项目的目录结构如下

引入相关依赖
  pom.xml代码清单

1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns=“http://maven.apache.org/POM/4.0.0”
3 xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
4 xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
5 4.0.0
6
7 com.triheart
8 first-cloud-invoker
9 1.0-SNAPSHOT
10
11
12
13
14 org.springframework.cloud
15 spring-cloud-dependencies
16 Dalston.SR1
17 pom
18 import
19
20
21
22
23
24
25 org.springframework.cloud
26 spring-cloud-starter-config
27
28
29 org.springframework.cloud
30 spring-cloud-starter-eureka
31
32
33 org.springframework.cloud
34 spring-cloud-starter-ribbon
35
36
37
38

编写配置文件,将Eureka客户端的服务调用者注册两个Eureka服务器
  application.yml代码清单

1 server:
2 port: 9000
3 spring:
4 application:
5 name: first-cloud-invoker
6 eureka:
7 instance:
8 hostname: localhost
9 client:
10 service-url:
11 defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/

编写启动类以及控制类,控制器通过RestTemplate类的对象来访问服务提供者提供的服务
  启动类FirstInvoker.java代码清单

1 package com.triheart.firstcloudinvoker;
2
3 import org.springframework.boot.SpringApplication;
4 import org.springframework.boot.autoconfigure.SpringBootApplication;
5 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
6
7 /**
8 * @author 阿遠
9 * Date: 2018/8/24
10 * Time: 20:04
11 */
12 @SpringBootApplication
13 @EnableDiscoveryClient
14 public class FirstInvoker {
15
16 public static void main(String[] args) {
17 SpringApplication.run(FirstInvoker.class, args);
18 }
19 }

控制器InvokerController.java代码清单

1 package com.triheart.firstcloudinvoker.controller;
2
3 import org.springframework.cloud.client.loadbalancer.LoadBalanced;
4 import org.springframework.context.annotation.Bean;
5 import org.springframework.context.annotation.Configuration;
6 import org.springframework.http.MediaType;
7 import org.springframework.web.bind.annotation.RequestMapping;
8 import org.springframework.web.bind.annotation.RequestMethod;
9 import org.springframework.web.bind.annotation.RestController;
10 import org.springframework.web.client.RestTemplate;
11
12 /**
13 * @author 阿遠
14 * Date: 2018/8/24
15 * Time: 20:07
16 */
17 @RestController
18 @Configuration
19 public class InvokerController {
20
21 @Bean
22 @LoadBalanced
23 public RestTemplate getRestTemplate() {
24 return new RestTemplate();
25 }
26
27 @RequestMapping(value = “/router”, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
28 public String router() {
29 RestTemplate restTpl = getRestTemplate();
30 // 根据应用名称调用服务
31 String json = restTpl.getForObject(
32 “http://first-cloud-provider/person/1”, String.class);
33 return json;
34 }
35 }

在浏览器中分别打开两个窗口访问http://localhost:9000/router,可以看到下图的效果

前后两次分别访问的是端口是8081和8080的服务提供者,此时已有负载均衡的效果,为了让负载均衡的效果看得更明显,我们编写一个REST客户端进行测试。
5.编写REST客户端进行测试
  新建一个maven项目,项目的目录结构如下

引入httpclient的依赖
  pom.xml代码清单

1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns=“http://maven.apache.org/POM/4.0.0”
3 xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
4 xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
5 4.0.0
6
7 first-cloud-rest-client
8 com.triheart
9 1.0-SNAPSHOT
10
11
12
13 org.apache.httpcomponents
14 httpclient
15 4.5.2
16
17
18

编写启动类TestHttpClient.java,在main方法编写中调用REST服务的代码
  TestHttpClient.java代码清单

1 package com.triheart.firstcloudrestclient;
2
3 import org.apache.http.HttpResponse;
4 import org.apache.http.client.methods.HttpGet;
5 import org.apache.http.impl.client.CloseableHttpClient;
6 import org.apache.http.impl.client.HttpClients;
7 import org.apache.http.util.EntityUtils;
8
9 /**
10 * @author 阿遠
11 * Date: 2018/8/24
12 * Time: 20:48
13 */
14 public class TestHttpClient {
15
16 public static void main(String[] args) throws Exception {
17 // 创建默认的HttpClient
18 CloseableHttpClient httpclient = HttpClients.createDefault();
19 // 调用6次服务并输出结果
20 for(int i = 0; i < 6; i++) {
21 // 调用 GET 方法请求服务
22 HttpGet httpget = new HttpGet(“http://localhost:9000/router”);
23 // 获取响应
24 HttpResponse response = httpclient.execute(httpget);
25 // 根据 响应解析出字符串
26 System.out.println(EntityUtils.toString(response.getEntity()));
27 }
28 }
29 }

在main方法中,通过for循环调用了6次9000端口的route服务并输出结果。我们按以下顺序启动各个组件:
  a.启动两个服务器端,在控制台分别输入slave1和slave2。
  b.启动两个服务提供者,在控制台分别输入8080和8081。
  c.启动服务调用者。
  启动了整个集群后,运行TestHttpClient,就可以看到控制台上输出如下

此时,就有了明显的负载均衡的效果。
五、 Eureka参数配置项详解
Eureka涉及到的参数配置项数量众多,它的很多功能都是通过参数配置来实现的,了解这些参数的含义有助于我们更好的应用Eureka的各种功能,下面对Eureka的配置项做具体介绍,供大家参考。
Eureka客户端配置
1、RegistryFetchIntervalSeconds
从eureka服务器注册表中获取注册信息的时间间隔(s),默认为30秒
2、InstanceInfoReplicationIntervalSeconds
复制实例变化信息到eureka服务器所需要的时间间隔(s),默认为30秒
3、InitialInstanceInfoReplicationIntervalSeconds
最初复制实例信息到eureka服务器所需的时间(s),默认为40秒
4、EurekaServiceUrlPollIntervalSeconds
询问Eureka服务url信息变化的时间间隔(s),默认为300秒
5、ProxyHost
获取eureka服务的代理主机,默认为null
6、ProxyProxyPort
获取eureka服务的代理端口, 默认为null
7、ProxyUserName
获取eureka服务的代理用户名,默认为null
8、ProxyPassword
获取eureka服务的代理密码,默认为null
9、GZipContent
eureka注册表的内容是否被压缩,默认为true,并且是在最好的网络流量下被压缩
10、EurekaServerReadTimeoutSeconds
eureka需要超时读取之前需要等待的时间,默认为8秒
11、EurekaServerConnectTimeoutSeconds
eureka需要超时连接之前需要等待的时间,默认为5秒
12、BackupRegistryImpl
获取实现了eureka客户端在第一次启动时读取注册表的信息作为回退选项的实现名称
13、EurekaServerTotalConnections
eureka客户端允许所有eureka服务器连接的总数目,默认是200
14、EurekaServerTotalConnectionsPerHost
eureka客户端允许eureka服务器主机连接的总数目,默认是50
15、EurekaServerURLContext
表示eureka注册中心的路径,如果配置为eureka,则为http://x.x.x.x:x/eureka/,在eureka的配置文件中加入此配置表示eureka作为客户端向注册中心注册,从而构成eureka集群。此配置只有在eureka服务器ip地址列表是在DNS中才会用到,默认为null
16、EurekaServerPort
获取eureka服务器的端口,此配置只有在eureka服务器ip地址列表是在DNS中才会用到。默认为null
17、EurekaServerDNSName
获取要查询的DNS名称来获得eureka服务器,此配置只有在eureka服务器ip地址列表是在DNS中才会用到。默认为null
18、UseDnsForFetchingServiceUrls
eureka客户端是否应该使用DNS机制来获取eureka服务器的地址列表,默认为false
19、RegisterWithEureka
实例是否在eureka服务器上注册自己的信息以供其他服务发现,默认为true
20、PreferSameZoneEureka
实例是否使用同一zone里的eureka服务器,默认为true,理想状态下,eureka客户端与服务端是在同一zone下
21、AllowRedirects
服务器是否能够重定向客户端请求到备份服务器。 如果设置为false,服务器将直接处理请求,如果设置为true,它可能发送HTTP重定向到客户端。默认为false
22、LogDeltaDiff
是否记录eureka服务器和客户端之间在注册表的信息方面的差异,默认为false
23、DisableDelta()
默认为false
24、fetchRegistryForRemoteRegions
eureka服务注册表信息里的以逗号隔开的地区名单,如果不这样返回这些地区名单,则客户端启动将会出错。默认为null
25、Region
获取实例所在的地区。默认为us-east-1
26、AvailabilityZones
获取实例所在的地区下可用性的区域列表,用逗号隔开。
27、EurekaServerServiceUrls
Eureka服务器的连接,默认为http://XXXX:X/eureka/,但是如果采用DNS方式获取服务地址,则不需要配置此设置。
28、FilterOnlyUpInstances(

是否获得处于开启状态的实例的应用程序过滤之后的应用程序。默认为true
29、EurekaConnectionIdleTimeoutSeconds
Eureka服务的http请求关闭之前其响应的时间,默认为30 秒
30、FetchRegistry
此客户端是否获取eureka服务器注册表上的注册信息,默认为true
31、RegistryRefreshSingleVipAddress
此客户端只对一个单一的VIP注册表的信息感兴趣。默认为null
32、HeartbeatExecutorThreadPoolSize()
心跳执行程序线程池的大小,默认为5
33、HeartbeatExecutorExponentialBackOffBound(
)
心跳执行程序回退相关的属性,是重试延迟的最大倍数值,默认为10
34、CacheRefreshExecutorThreadPoolSize()
执行程序缓存刷新线程池的大小,默认为5
35、CacheRefreshExecutorExponentialBackOffBound
执行程序指数回退刷新的相关属性,是重试延迟的最大倍数值,默认为10
36、DollarReplacement
eureka服务器序列化/反序列化的信息中获取“KaTeX parse error: Expected group after '_' at position 99: …”符号的的替换字符串。默认为“_̲_” 38、On…{random.value}}
2、Appname
获得在eureka服务上注册的应用程序的名字,默认为unknow
3、AppGroupName
获得在eureka服务上注册的应用程序组的名字,默认为unknow
4、InstanceEnabledOnit(

实例注册到eureka服务器时,是否开启通讯,默认为false
5、NonSecurePort
获取该实例应该接收通信的非安全端口。默认为80
6、SecurePort
获取该实例应该接收通信的安全端口,默认为443
7、NonSecurePortEnabled
该实例应该接收通信的非安全端口是否启用,默认为true
8、SecurePortEnabled
该实例应该接收通信的安全端口是否启用,默认为false
9、LeaseRenewalIntervalInSeconds
eureka客户需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认为30 秒
10、LeaseExpirationDurationInSeconds
Eureka服务器在接收到实例的最后一次发出的心跳后,需要等待多久才可以将此实例删除,默认为90秒
11、VirtualHostName
此实例定义的虚拟主机名,其他实例将通过使用虚拟主机名找到该实例。
12、SecureVirtualHostName
此实例定义的安全虚拟主机名
13、ASGName(
与此实例相关联 AWS自动缩放组名称。此项配置是在AWS环境专门使用的实例启动,它已被用于流量停用后自动把一个实例退出服务。
14、HostName
与此实例相关联的主机名,是其他实例可以用来进行请求的准确名称
15、MetadataMap(
)
获取与此实例相关联的元数据(key,value)。这个信息被发送到eureka服务器,其他实例可以使用。
16、DataCenterInfo(
该实例被部署在数据中心
17、IpAddress
获取实例的ip地址
18、StatusPageUrlPath(

获取此实例状态页的URL路径,然后构造出主机名,安全端口等,默认为/info
19、StatusPageUrl()
获取此实例绝对状态页的URL路径,为其他服务提供信息时来找到这个实例的状态的路径,默认为null
20、HomePageUrlPath(

获取此实例的相关主页URL路径,然后构造出主机名,安全端口等,默认为/
21、HomePageUrl()
获取此实例的绝对主页URL路径,为其他服务提供信息时使用的路径,默认为null
22、HealthCheckUrlPath
获取此实例的相对健康检查URL路径,默认为/health
23、HealthCheckUrl
获取此实例的绝对健康检查URL路径,默认为null
24、SecureHealthCheckUrl
获取此实例的绝对安全健康检查网页的URL路径,默认为null
25、DefaultAddressResolutionOrder
获取实例的网络地址,默认为[]
26、Namespace
获取用于查找属性的命名空间,默认为eureka
Eureka服务端配置
1、AWSAccessId
获取aws访问的id,主要用于弹性ip绑定,此配置是用于aws上的,默认为null
2、AWSSecretKey
获取aws私有秘钥,主要用于弹性ip绑定,此配置是用于aws上的,默认为null
3、EIPBindRebindRetries
获取服务器尝试绑定到候选的EIP的次数,默认为3
4、EIPBindingRetryIntervalMsWhenUnbound(
)
服务器检查ip绑定的时间间隔,单位为毫秒,默认为1 * 60 * 1000
5、EIPBindingRetryIntervalMs
与上面的是同一作用,仅仅是稳定状态检查,默认为5 * 60 * 1000
6、EnableSelfPreservation
自我保护模式,当出现出现网络分区、eureka在短时间内丢失过多客户端时,会进入自我保护模式,即一个服务长时间没有发送心跳,eureka也不会将其删除,默认为true
7、RenewalPercentThreshold(*)

   阈值因子,默认是0.85,如果阈值比最小值大,则自我保护模式开启
   8、RenewalThresholdUpdateIntervalMs
   阈值更新的时间间隔,单位为毫秒,默认为15 * 60 * 1000
   9、PeerEurekaNodesUpdateIntervalMs(*)
   集群里eureka节点的变化信息更新的时间间隔,单位为毫秒,默认为10 * 60 * 1000
   10、EnableReplicatedRequestCompression
   复制的数据在发送请求时是否被压缩,默认为false
   11、NumberOfReplicationRetries
   获取集群里服务器尝试复制数据的次数,默认为5
   12、PeerEurekaStatusRefreshTimeIntervalMs
   服务器节点的状态信息被更新的时间间隔,单位为毫秒,默认为30 * 1000
   13、WaitTimeInMsWhenSyncEmpty(*)
   在Eureka服务器获取不到集群里对等服务器上的实例时,需要等待的时间,单位为毫秒,默认为1000 * 60 * 5
   14、PeerNodeConnectTimeoutMs
   连接对等节点服务器复制的超时的时间,单位为毫秒,默认为200
   15、PeerNodeReadTimeoutMs
   读取对等节点服务器复制的超时的时间,单位为毫秒,默认为200
   16、PeerNodeTotalConnections
   获取对等节点上http连接的总数,默认为1000
   17、PeerNodeTotalConnectionsPerHost(*)
   获取特定的对等节点上http连接的总数,默认为500
   18、PeerNodeConnectionIdleTimeoutSeconds(*)
   http连接被清理之后服务器的空闲时间,默认为30秒
   19、RetentionTimeInMSInDeltaQueue(*)
   客户端保持增量信息缓存的时间,从而保证不会丢失这些信息,单位为毫秒,默认为3 * 60 * 1000
   20、DeltaRetentionTimerIntervalInMs
   清理任务程序被唤醒的时间间隔,清理过期的增量信息,单位为毫秒,默认为30 * 1000
   21、EvictionIntervalTimerInMs
   过期实例应该启动并运行的时间间隔,单位为毫秒,默认为60 * 1000
   22、ASGQueryTimeoutMs(*)
   查询AWS上ASG(自动缩放组)信息的超时值,单位为毫秒,默认为300
   23、ASGUpdateIntervalMs
   从AWS上更新ASG信息的时间间隔,单位为毫秒,默认为5 * 60 * 1000
   24、ASGCacheExpiryTimeoutMs(*)
   缓存ASG信息的到期时间,单位为毫秒,默认为10 * 60 * 1000
   25、ResponseCacheAutoExpirationInSeconds(*)
   当注册表信息被改变时,则其被保存在缓存中不失效的时间,默认为180秒
   26、ResponseCacheUpdateIntervalMs(*)
   客户端的有效负载缓存应该更新的时间间隔,默认为30 * 1000毫秒
   27、UseReadOnlyResponseCache(*)
   目前采用的是二级缓存策略,一个是读写高速缓存过期策略,另一个没有过期只有只读缓存,默认为true,表示只读缓存
   28、DisableDelta(*)
   增量信息是否可以提供给客户端看,默认为false
   29、MaxIdleThreadInMinutesAgeForStatusReplication(*)
   状态复制线程可以保持存活的空闲时间,默认为10分钟
   30、MinThreadsForStatusReplication
   被用于状态复制的线程的最小数目,默认为1
   31、MaxThreadsForStatusReplication
   被用于状态复制的线程的最大数目,默认为1
   32、MaxElementsInStatusReplicationPool
   可允许的状态复制池备份复制事件的最大数量,默认为10000
   33、SyncWhenTimestampDiffers
   当时间变化实例是否跟着同步,默认为true
   34、RegistrySyncRetries
   当eureka服务器启动时尝试去获取集群里其他服务器上的注册信息的次数,默认为5
   35、RegistrySyncRetryWaitMs
   当eureka服务器启动时获取其他服务器的注册信息失败时,会再次尝试获取,期间需要等待的时间,默认为30 * 1000毫秒
   36、MaxElementsInPeerReplicationPool(*)
   复制池备份复制事件的最大数量,默认为10000
   37、MaxIdleThreadAgeInMinutesForPeerReplication(*)
   复制线程可以保持存活的空闲时间,默认为15分钟
   38、MinThreadsForPeerReplication(*)
   获取将被用于复制线程的最小数目,默认为5
   39、MaxThreadsForPeerReplication
   获取将被用于复制线程的最大数目,默认为20
   40、MaxTimeForReplication(*)
   尝试在丢弃复制事件之前进行复制的时间,默认为30000毫秒
   41、PrimeAwsReplicaConnections(*)
   对集群中服务器节点的连接是否应该准备,默认为true
   42、DisableDeltaForRemoteRegions(*)
   增量信息是否可以提供给客户端或一些远程地区,默认为false
   43、RemoteRegionConnectTimeoutMs(*)
   连接到对等远程地eureka节点的超时时间,默认为1000毫秒
   44、RemoteRegionReadTimeoutMs(*)
   获取从远程地区eureka节点读取信息的超时时间,默认为1000毫秒
   45、RemoteRegionTotalConnections
   获取远程地区对等节点上http连接的总数,默认为1000
   46、RemoteRegionTotalConnectionsPerHost
   获取远程地区特定的对等节点上http连接的总数,默认为500
   47、RemoteRegionConnectionIdleTimeoutSeconds
   http连接被清理之后远程地区服务器的空闲时间,默认为30秒
   48、GZipContentFromRemoteRegion(*)
   eureka服务器中获取的内容是否在远程地区被压缩,默认为true
   49、RemoteRegionUrlsWithName
   针对远程地区发现的网址域名的map
   50、RemoteRegionUrls
   远程地区的URL列表
   51、RemoteRegionAppWhitelist(*)
   必须通过远程区域中检索的应用程序的列表
   52、RemoteRegionRegistryFetchInterval
   从远程区域取出该注册表的信息的时间间隔,默认为30秒
   53、RemoteRegionFetchThreadPoolSize
   用于执行远程区域注册表请求的线程池的大小,默认为20
   54、RemoteRegionTrustStore
   用来合格请求远程区域注册表的信任存储文件,默认为空
   55、RemoteRegionTrustStorePassword
   获取偏远地区信任存储文件的密码,默认为“changeit”
   56、disableTransparentFallbackToOtherRegion(*)
   如果在远程区域本地没有实例运行,对于应用程序回退的旧行为是否被禁用, 默认为false
   57、BatchReplication(*)
   表示集群节点之间的复制是否为了网络效率而进行批处理,默认为false
   58、LogIdentityHeaders(*)
   Eureka服务器是否应该登录clientAuthHeaders,默认为true
   59、RateLimiterEnabled
   限流是否应启用或禁用,默认为false
   60、RateLimiterThrottleStandardClients
   是否对标准客户端进行限流,默认false
   61、RateLimiterPrivilegedClients(*)
   认证的客户端列表,这里是除了标准的eureka Java客户端。
   62、RateLimiterBurstSize(*)
   速率限制的burst size ,默认为10,这里用的是令牌桶算法
   63、RateLimiterRegistryFetchAverageRate(*)
   速率限制器用的是令牌桶算法,此配置指定平均执行注册请求速率,默认为500
   64、RateLimiterFullFetchAverageRate(*)
   速率限制器用的是令牌桶算法,此配置指定平均执行请求速率,默认为100
   65、ListAutoScalingGroupsRoleName(*)
   用来描述从AWS第三账户的自动缩放组中的角色名称,默认为“ListAutoScalingGroups”
   66、JsonCodecName(*)
   如果没有设置默认的编解码器将使用全JSON编解码器,获取的是编码器的类名称
   67、XmlCodecName(*)
   如果没有设置默认的编解码器将使用xml编解码器,获取的是编码器的类名称
   68、BindingStrategy(*)
   获取配置绑定EIP或Route53的策略。
   69、Route53DomainTTL(*)
   用于建立route53域的ttl,默认为301
   70、Route53BindRebindRetries(*)
   服务器尝试绑定到候选Route53域的次数,默认为3
   71、Route53BindingRetryIntervalMs(*)
   服务器应该检查是否和Route53域绑定的时间间隔,默认为5 * 60 * 1000毫秒
   72、Experimental(*)
   当尝试新功能迁移过程时,为了避免配置API污染,相应的配置即可投入实验配置部分,默认为null
   以上是Eureka配置项的详细说明,分为Eureka客户端配置、Eureka服务端配置和微服务端配置,一共100多项,其中有很多配置参数并不需要我们去修改,使用默认的就好,有些跟我们业务相关的配置参数可根据需要自行设置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值