声明:本文不提供任何开发相关的指导方向,文章只是个人在学习时所做的记录信息,用来供个人备忘,同时由于技术更新迭代速度很快,本人并不保证信息在各个版本下的准确性,本文记录时所使用的SpringCloud版本为:2.2.1
1.单服务器模式
- (1)服务器端
pom文件添加如下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
设置服务器端口
# 设置服务器端口
server.port=8761
由于是服务器端,设置以下两个参数,否则启动服务器会报异常(异常不影响使用)。对于服务提供者与服务调用者,以下两个参数可以视情况进行设置,正常来说,服务提供者需要将服务注册到eureka,因此第一个参数保持默认(true),第二个参数可以设置为false;服务调用者需要从eureka拉取注册服务信息,因此第二个参数保持默认(true),第一个参数可以设置为false。但是在实际开发中,服务之间一般都是互相调用,很少有服务只做为服务提供者或者服务调用者,因此在实际开发中,以下两个参数在非服务器端基本都是保持默认(true)即可。
# 不注册到eureka
eureka.client.register-with-eureka=false
# 不从eureka拉取注册服务信息
eureka.client.fetch-registry=false
启动类添加如下注解
@EnableEurekaServer
- (2)服务提供者
pom文件添加如下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
设置服务器端口
# 设置服务器端口
server.port=8100
设置服务名称
# 设置服务名称
spring.application.name=eureka-single-server
设置服务实例主机名称
# 设置服务实例主机名称
eureka.instance.hostname=localhost
设置服务注册地址
# 设置服务注册地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
启动类添加如下注解
@EnableEurekaClient
- (3)服务调用者
pom文件添加如下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
设置服务器端口
# 设置服务器端口
server.port=9000
设置服务名称,做为服务调用者,可以不进行此设置
# 设置服务名称
spring.application.name=eureka-single-invoke
设置服务实例主机名称
# 设置服务实例主机名称
eureka.instance.hostname=localhost
设置服务注册地址,做为服务调用者,可以不进行此设置
# 设置服务注册地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
启动类添加如下注解
@EnableEurekaClient
同时使用Ribbon做负载均衡,使用RestTemplate做为服务调用方式,可以在启动类添加如下代码
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
调用服务时,注入RestTemplate
@Autowired
RestTemplate restTemplate;
使用RestTemplate调用服务即可
String url = "http://eureka-single-server/provider";
String result = restTemplate.getForObject(url, String.class);
2.集群模式
- (1)服务器端
pom文件添加如下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
配置文件如下
server:
port: 8761
spring:
application:
name: eureka-server
eureka:
instance:
hostname: slave1
client:
service-url:
defaultZone: http://slave2:8762/eureka/
server:
port: 8762
spring:
application:
name: eureka-server
eureka:
instance:
hostname: slave2
client:
service-url:
defaultZone: http://slave1:8761/eureka/
做为服务器端,需要保证以下2点:
- (A)服务名称相同;
- (B)注册地址为相互注册。
启动类添加如下注解
@EnableEurekaServer
- (2)服务提供者
pom文件添加如下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
配置文件如下
server:
port: 8100
spring:
application:
name: eureka-multi-server
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://slave1:8761/eureka/,http://slave2:8762/eureka/
server:
port: 8200
spring:
application:
name: eureka-multi-server
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://slave1:8761/eureka/,http://slave2:8762/eureka/
做为服务提供者的集群,配置信息中只需要保证在不同的服务器启动即可(IP不同、端口不同),注册地址需要为服务器集群地址(多个服务器地址以“,”分隔)。
启动类添加如下注解
@EnableEurekaClient
- (3)服务调用者
pom文件添加如下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
配置文件如下
server:
port: 9000
spring:
application:
name: eureka-multi-invoke
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://slave1:8761/eureka/,http://slave2:8762/eureka/
启动类添加如下注解
@EnableEurekaClient
同时使用Ribbon做负载均衡,使用RestTemplate做为服务调用方式,可以在启动类添加如下代码
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
调用服务时,注入RestTemplate
@Autowired
RestTemplate restTemplate;
使用RestTemplate调用服务即可
String url = "http://eureka-multi-server/provider";
String result = restTemplate.getForObject(url, String.class);
3.健康自检
pom文件添加如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置文件如下
# 设置自动检测点,默认只开放了info、health两个端点
management.endpoints.web.exposure.include=*
# eureka将服务实例状态信息更新到服务器的时间间隔,默认30s
eureka.client.instance-info-replication-interval-seconds=10
# 客户端实例向服务器发送心跳的时间间隔
eureka.instance.lease-renewal-interval-in-seconds=20
# 服务器检测客户端心跳的时间间隔
eureka.instance.lease-expiration-duration-in-seconds=90
# 客户端去服务器端抓取注册表的时间间隔
eureka.client.registry-fetch-interval-seconds=20