<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
<dependency>
<groupId>com.yu.springcloudgroupId>
<artifactId>cloud-api-commonsartifactId>
<version>1.0-SNAPSHOTversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
dependencies>
server:
port: 7001
eureka:
instance:
#eureka服务端的实例名称
hostname: localhost
client:
#false表示不向注册中心注册自己
register-with-eureka: true
#false表示自己端就是注册中心,职责是维护实例,并不需要检索服务
fetch-registry: false
service-url:
#设置与Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7001.class, args);
}
}
将上一篇搭建好的服务提供者和消费者注册到eureka中
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka
改pom(从cloud-eureka-server7001的pom复制)
C:\Windows\System32\drivers\etc路径下的hosts文件添加
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
server:
port: 7001
eureka:
instance:
#eureka服务端的实例名称
hostname: eureka7001.com
client:
#false表示不向注册中心注册自己
register-with-eureka: false
#false表示自己端就是注册中心,职责是维护实例,并不需要检索服务
fetch-registry: false
service-url:
#设置与Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://eureka7002.com:7002/eureka/
server:
port: 7001
eureka:
instance:
#eureka服务端的实例名称
hostname: eureka7002.com
client:
#false表示不向注册中心注册自己
register-with-eureka: false
#false表示自己端就是注册中心,职责是维护实例,并不需要检索服务
fetch-registry: false
service-url:
#设置与Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://eureka7001.com:7001/eureka/
参考cloud-provider-payment8001来新建cloud-provider-payment8002,修改cloud-provider-payment8002的yml的端口为8002
现在已经有两个提供者了,需要修改消费者的访问地址
已经有两个提供者(payment)了,现在需要使用@LoadBalanced注解赋予RestTemplate负载均衡
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
测试
最终会8001和8002接口交替调用,实现了负载均衡,搭建成功
**概述:**默认情况下,如果EurekaServer在- 定时间内没有接收到某 个微服务实例的心跳,EurekaServer将 会注销该实例(默认90秒)。但是当网络分区故障发生(延时、卡顿、拥挤)时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险了一因为微服务本身其实是健康的,此时本不应该注销这个微服务。Eureka通过 “自我保护模式”来解决这个问题一-当EurekaServer节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。如果在Eureka Server首页看到下面这段提示,则说明Eureka进入了保护模式。
如何配置禁止自我保护:
eureka:
server:
enable-self-preservation: false