zoukankan      html  css  js  c++  java
  • SpringCloud学习笔记(2)----Spring Cloud Netflix之Eureka的使用

    1.  Spring Cloud Netflix

    Spring Cloud Netflix 是Spring Cloud 的核心子项目,是对Netflix公司一系列开源产品的封装。它为Spring Boot应用提供了自动配置的整合,只需要通过一些简单的注解,就可以快速的在Spring Cloud应用中使用。

      它主要提供以下模块:

      服务发现和注册(Eureka)

      客户端负载均衡(Ribbon)

      断路由(Hystrix)

      只能路由(Zuul)

    2. 服务注册和发现(Eureka)

      调用关系图:

      

      服务注册和发现的具体实现:

      新建一个服务端(注册中心)工程,引入依赖。

      pom文件:

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

    在工程启动类上加上@EnableEurekaServer注解,配置application.properties文件

     
    # server (eureka 默认端口为:8761)
    server.port=8761
    
    # spring
    spring.application.name=spring-cloud-server
    
    # eureka
    # 是否注册到eureka
    eureka.client.register-with-eureka=false
    # 是否从eureka获取注册信息
    eureka.client.fetch-registry=false
    # eureka服务器的地址(注意:地址最后面的 /eureka/ 这个是固定值)
    eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
     

      访问http://localhost:8761/如下

      注册到本注册中心的服务可能由于刚启动,需要校验一下服务,所以会出现保护模式。

      接下来注册一个服务提供者,其实它是一个Eureka客户端,实现方式如下:

      先新建一个服务,引入如下pom文件

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

      在该服务的启动类中添加注解@EnableEurekaClient,配置端口及服务名称信息等

    server.port=8762
    spring.application.name=spring-cloud-provider
    
    # 要注册到的注册中心地址
    eureka.client.serviceUrl.defaultZoon=http://localhost:8761/eureka/

      启动该工程,访问http://localhost:8761/,会发现在Instances currently registered with Eureka中存在该服务的信息,表示该服务提供者已经被注册成功了。

      再创建一个工程,同样引入客户端以来和添加@EnableEurekaClient,修改配置文件的服务名称和端口,注册中心地址与提供者保持一致,如下:

    server.port=8888
    
    spring.application.name=spring-cloud-consumer
    # 要注册到的注册中心地址
    eureka.client.server-url.defaultZoon=http://localhost:8761/eureka/

      启动该工程,访问http://localhost:8761/,会发现在Instances currently registered with Eureka中存在该服务的信息,表示该服务消费者已经被注册成功了。

      注意:由于spring-cloud-starter-netflix-eureka-client没有依赖tomcat,所以在创建客户端的时候,需要加入以下依赖

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>

      否则会报无法创建bean的错误。

    3.  Eureka和zookeeper的对比

      3.1 分布式系统的CAP理论

      一致性(C):所有节点上的数据时刻保持同步。

      可用性(A):每个请求都能接收到一个响应,无论响应失败还是成功。

      分区容错性(P): 系统应该能持续提供服务,即使系统内部有消息丢失。

      由于分区容错性在分布式系统中必须要保证,所以我们只能在A和C之间进行权衡,Zookeeper保证的是CP,而Eureka保证的是AP

      3.2 Zookeeper保证CP

      Zookeeper是个cp的,即任何时刻对Zookeeper的请求访问都能得到一致的数据结果,同时系统对网络分割具有容错性,但是它不能保证每次服务请求都可用,也就是说zookeeper可能会在极端情况下丢弃一些请求。

      3.3 Eureka保证AP

      Eureka在设计时就优先保证了可用性,我们可以容忍注册中心返回的是几分钟以前的注册信息,但是不能够接受服务直接down掉 不可用,也就是说,服务注册功能对可用性的要求高于一致性。

      如果Eureka服务节点在短时间内失去了大量的心跳连接,那么这个节点将进入”自我保护模式“,同时保留那些”心跳死亡”的服务注册信息不过期,此时,这个Eureka节点对于新的服务还能提供注册服务,对于死亡的仍然保留,以防还有客户端向其发送请求,当故障恢复后,这个节点会推出自我保护模式,Eureka的哲学是,同时保存好数据和坏数据,总比丢失数据要更好。

    至于运用中使用什么为注册中心更具业务和需求来定,没有最好的架构,只有最合适的架构。

    原文 SpringCloud学习笔记(2)----Spring Cloud Netflix之Eureka的使用

  • 相关阅读:
    为什么lambda中用到的局部变量需要为final
    ubuntu安装idea之后字体不友好
    mysql存表情出错的解决方案(类似xF0x9Fx98x86xF0x9F)
    CentOS7.4 安装mysql
    mysql修改时区
    发个自己写的微信小游戏
    算法:IP分割问题(python实现)
    教你用Python抓取百度翻译
    教你用Python遍历指定目录下的所有文件以及文件的过滤
    教你用Python做个简单的加密程序(还基础什么呀,直接来练习吧,带源码)
  • 原文地址:https://www.cnblogs.com/xiaoshen666/p/10844124.html
Copyright © 2011-2022 走看看