• 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:各节点都是平等的,部分节点不可用不会导致集群瘫痪。

  • 相关阅读:
    学习计划(一)——JavaScript 殷的博客
    学习计划——巩固基础+进阶练习 殷的博客
    第二章:在HTML中使用JavaScript 殷的博客
    W3Cschool学习笔记——CSS教程 殷的博客
    W3Cschool学习笔记——HTML5基础教程 殷的博客
    PS切图篇(一)界面设置 殷的博客
    W3Cschool学习笔记——CSS3教程 殷的博客
    PHP Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
    css怎么让图片垂直左右居中?(外层div是浮动且按照百分比排列)
    在各浏览器和各分辨率下如何让div内的table垂直水平居中?
  • 原文地址:https://www.cnblogs.com/qzt666/p/11364042.html
Copyright © 2020-2023  润新知