spring cloud总结

SpringCloud

spring cloud是一套实现微服务架构的框架.先来认识一下里面的几个组件

 

eureka

注册中心,需要对外提供服务的服务和需要调用其它服务的服务都要把自己注册到eureka上面去.注册后访问eureka的管理页面如下图

 

使用eureka的简单步骤如下:

1.导依赖,注意这里依赖一定要是带starter的那个,我总是搞错,这里导的是服务端的依赖,只有eureka服务需要导这个,其它的导client就好.

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

2.在启动类的头上加上@EnableEurekaServer 来声明这个应用是一个EurekaServer.

3.在yml中配置eureka地址.

server:
  port: 10086
spring:
  application:
    name: eureka-server # 应用名称,会在Eureka中作为服务的id标识(serviceId)
eureka:
  client:
    service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要写其它Server的地址。
      defaultZone: http://127.0.0.1:10086/eureka
    register-with-eureka: false # 不注册自己
    fetch-registry: false #不拉取服务

搭建好注册中心后,服务就可以把自己往上注册了.步骤如下

1.导依赖,一定要是带starter的,否则启动会报错,这里导的是client客户端

<!-- Eureka客户端 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2.配置eureka

# ...略
spring:
  application:
    name: user-service #这就是在注册中心显示的名字
eureka:
  client:
    service-url: # EurekaServer地址
      defaultZone: http://127.0.0.1:10086/eureka/

 

eureka细节

这个排序不分先后,我是想起谁写谁.

1.服务列表里的地址默认是主机名,可以在yml里配置为IP地址.

eureka:
  instance:
    ip-address: 127.0.0.1 # ip地址
    prefer-ip-address: true # 更倾向于使用ip,而不是host名
    instance-id: ${eureka.instance.ip-address}:${server.port} # 自定义实例的id

 

2.每个服务可有有多个实例(集群),每个实例都有自己的地址.但是他们都是同一个服务.

3.eureka也可以集群,并且各eureka之间会相互注册,把注册在自己这里的服务同步给集群中的每个节点,保证自己挂了,注册在自己上面的服务不会丢失.当有eureka集群时,服务在注册自己时会先找写在第一个的eureka地址,注册不上去再找第二个.那配置就得改成这样.

defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka

4.服务在把自己注册导eureka上后,每30s会向eurekaServer发送Rest请求(心跳),表示自己还活着,谓之服务续约.如果服务90s都没续约,eurekaServer会给它做一个挂了的标记.这2个时间可以通过配置修改,但是默认的也挺好.当服务正常停机时会向eureka发请求表示自己下线了,不玩了,不是我挂了.然后eureka会直接剔除它.

eureka:
  instance:
    lease-expiration-duration-in-seconds: 90
    lease-renewal-interval-in-seconds: 30

4.eurekaServer本身会每60s清扫一次挂了的服务(从列表里剔除).所以最长150s,你没用心跳就会被剔除,谓之失效剔除.这个时间可以通过配置修改,但是默认的也挺好.

eureka.server.eviction-interval-timer-in-ms

5.当有一个服务未按时心跳续约时,eureka会检测最近1分钟心跳续约的比例是否低于85%,如果低于85%,他会认为自己挂了,就不会再剔除服务.谓之自我保护机制.在生产环境下,因为网络延迟等原因,心跳失败实例的比例很有可能超标,但是此时就把服务剔除列表并不妥当,因为服务可能没有宕机。Eureka在这段时间内不会剔除任何服务实例,直到网络恢复正常。生产环境下这很有效,保证了大多数服务依然可用,不过也有可能获取到失败的服务实例,因此服务调用者必须做好服务的失败容错。自我保护机制可以关,同样不建议.

eureka:
  server:
    enable-self-preservation: false # 关闭自我保护模式(缺省为打开)

6.服务的拉取也是每30s拉取一次.缓存在本地.所以就是eureka挂了,也能访问其它服务,因为本地有其它服务的地址,当然如果其它服务挂了,就每办法了.

eureka:
  client:
    registry-fetch-interval-seconds: 30

7.每个服务都可以选择把不把自己注册到eureka上去,也可以选择要不要从上面拉取服务.这个可以自行配置.

eureka:
  client:
    service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要写其它Server的地址。
      defaultZone: http://127.0.0.1:10086/eureka
    register-with-eureka: false # 不注册自己
    fetch-registry: false #不拉取服务

 

 

 

 

posted @ 2020-11-25 23:19  重生之我是程序员  阅读(92)  评论(0)    收藏  举报