发表于: 2018-01-06 10:22:32

1 615


今天完成的事


学会了各模块之间使用分布式

@EnableDiscoveryClient
@SpringBootApplication
public class Application {

@RestController
class HelloController implements HelloService {
@Override
public String hello(String name) {
return "hello " + name;
}
}

public static void main(String[] args) {
new SpringApplicationBuilder(Application.class).web(true).run(args);
}

}

spring.application.name=eureka-feign-client
server.port=2101

eureka.client.serviceUrl.defaultZone=http://eureka.didispace.com/eureka/
  • 创建一个Spring Boot项目:eureka-feign-consumer,pom.xml的主要内容如下:
<dependency>
<groupId>com.didispace</groupId>
<artifactId>eureka-feign-api</artifactId>
<version>1.0.0</version>
</dependency>


遇到的问题


查阅了很多文档,终于了解了中间的问题。现将理解整理如下:

Eureka server和client之间每隔30秒会进行一次心跳通信,告诉server,client还活着。由此引出两个名词: 
Renews threshold:server期望在每分钟中收到的心跳次数 
Renews (last min):上一分钟内收到的心跳次数。

前文说到禁止注册server自己为client,不管server是否禁止,阈值(threshold)是1。client个数为n,阈值为1+2*n(此为一个server且禁止自注册的情况) 
如果是多个server,且开启了自注册,那么就和client一样,是对于其他的server来说就是client,是要*2的

我开了两个server,自注册,相关数据如下 
这里写图片描述 
阈值:1+2*1 
renews: 
1)自注册 2 + 2*1 
2)非自注册:2*1

Eurake有一个配置参数eureka.server.renewalPercentThreshold,定义了renews 和renews threshold的比值,默认值为0.85。当server在15分钟内,比值低于percent,即少了15%的微服务心跳,server会进入自我保护状态,Self-Preservation。在此状态下,server不会删除注册信息,这就有可能导致在调用微服务时,实际上服务并不存在。 
这种保护状态实际上是考虑了client和server之间的心跳是因为网络问题,而非服务本身问题,不能简单的删除注册信息

stackoverflow上,有人给出的建议是: 
1、在生产上可以开自注册,部署两个server 
2、在本机器上测试的时候,可以把比值调低,比如0.49 
3、或者简单粗暴把自我保护模式关闭

明天完成的事

方案设计


返回列表 返回列表
评论

    分享到