SpringCloud学习笔记(2)注册中心——eureka

注册中心——eureka

1、注册中心服务端配置:

pom中添加依赖:

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>

application.yml

eureka:
client:
  fetch-registry: false      #是否启用湖区注册服务信息,因为这是一个单节点的EurekaServer,不需要同步其他的EurekaServer节点的数据,所以设置为false;
  register-with-eureka: false      #表示是否向eureka注册服务,即在自己的eureka中注册自己,默认为true,此处应该设置为false;
  service-url:
    defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

 

2、注册中心客户端注解:

pom中添加依赖:

        <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.yml

spring:
application:
  name: eureka-producer
eureka:
client:
  service-url:
    defaultZone: http://192.168.20.217:1111/eureka
 #instance:
   #hostname: 192.168.20.217
instance:
  instance-id: eureka-producer_2222  # 自定义服务名称信息
  prefer-ip-address: true #访问地址可以显示IP

 

3、消费者配置

@Configuration
public class ConfigBean {

/**
* 用于同步客户端HTTP访问的Spring scentral类。它简化了与httpserver的通信,并实施了RESTful原则。它处理HTTP连接,让应用程序代码提供url(带有可能的模板变量)并提取结果。
* @author qinzhitian<br>
* @date 2019年8月14日 上午9:42:20
*/
@Bean
//@LoadBalanced // 负载均衡 Ribbon配置
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}

控制层调用:

private final String REST_URL_PREFIX = "http://EUREKA-PRODUCER";
@Autowired
private RestTemplate restTemplate;

@Value("${server.port}")
private String port;

@RequestMapping("/hi")
public String home(@RequestParam String name) {
Map<String, String> map = new HashMap<>();
map.put("name", "李四");
return restTemplate.getForObject(REST_URL_PREFIX + "/hi?name={name}", String.class, map);
}

@GetMapping("/test/discovery")
public Object discovery() {
return restTemplate.getForObject(REST_URL_PREFIX + "/test/discovery", Object.class);
}

 

3、eureka自我保护机制

某时刻某一个微服务不可用了,erueka不会立刻清理,依旧对该微服务的信息进行保存。

在自我保护模式中,Eureka Server会保护服务注册表中的信息,不再注销任何服务实例。当它收到的心跳数重新恢复到阈值以上时,该Eureka Server节点就会自动退出自我保护模式。它的设计哲学就是宁可保留错误的服务注册信息,也不盲目注销任何可能健康的服务实例。

禁用自我保护机制: eureka.server.enable-self-preservation=false

4、集群配置

4.1 注册服务端配置

server:
port: 1001
servlet:
  context-path: /
spring:
application:
  name: eureka-server1
eureka:
client:
  fetch-registry: false      #是否启用湖区注册服务信息,因为这是一个单节点的EurekaServer,不需要同步其他的EurekaServer节点的数据,所以设置为false;
  register-with-eureka: false      #表示是否向eureka注册服务,即在自己的eureka中注册自己,默认为true,此处应该设置为false;
  service-url:
    defaultZone: http://eureka-server2:1002/eureka/,http://eureka-server3:1003/eureka/
instance:
  hostname: eureka-server1  #需要在host配置
server:
   #设为false,关闭自我保护,即Eureka server在云心光器件会去统计心跳失败比例在15分钟之内是否低于85%,如果低于85%,EurekaServer
   #会将这些事例保护起来,让这些事例不会过期,但是在保护器内如果刚哈这个服务提供者非正常下线了,此时服务消费者会拿到一个无效的服务
   #实例,此时调用会失败,对于这个问题需要服务消费者端有一些容错机制,如重试、断路器等;
   #enable-self-preservation: false
   #扫描失效服务的间隔时间(单位是毫秒,摩恩是60*1000),即60s
  eviction-interval-timer-in-ms: 10000

4.2 注册客户端配置

server:
port: 2001
servlet:
  context-path: /
spring:
application:
  name: eureka-producer1
   
eureka:
client:
   #是否启用湖区注册服务信息,因为这是一个单节点的EurekaServer,不需要同步其他的EurekaServer节点的数据,所以设置为false;
  # fetch-registry: false
   #表示是否向eureka注册服务,即在自己的eureka中注册自己,默认为true,此处应该设置为false;
  # register-with-eureka: true
  service-url:
    defaultZone: http://eureka-server1:1001/eureka/,http://eureka-server2:1002/eureka/,http://eureka-server3:1003/eureka/
 #instance:
   #hostname: 192.168.20.217
instance:
  instance-id: 192.168.20.217:2001  # 自定义服务名称信息
  hostname: eureka-producer1
  prefer-ip-address: true #访问地址可以显示IP
   
info:
app.name: eureka-producer1
company.name: 公司名称
build.artifactId: $project.artifactId$
build.version: $project.version$

 

Zookeeper与Eureka的对比

1、传统的ACID:

AAtomicity原子性
C Consistency 一致性
I Isolation 独立性
D Durability 持久性

 

2、NoSQL的基本特性CAP

CConsistency强一致性
A Availability 可用性
P Partition tolerance 分区容错性

CAP三进二:现在分布式存储系统最多只能同时满足三个中的两个,而分区容错性是必须要实现的,因此我们只能在一致性与可用性之间做权衡

 

3、

zookeeper保证的是CP:leader瘫痪是需要30~120s的时间重新选举,期间无法使用注册服务。

Eureka则是AP:各节点都是平等的,部分节点不可用不会导致集群瘫痪。

原文地址:https://www.cnblogs.com/qzt666/p/11364042.html