Spring Cloud

SpringCloud学习

2019-05-06  本文已影响113人  大力水手_

Spring Cloud的微服务框架中涉及到配置管理、服务治理、路由管理、微代理、控制总线等.是一个成熟的兼容的分布式框架.

所有组件在springCloud官网: 点击这里

Spring Cloud的历代版本更迭

注意:使用springboot 1.3x 版本相应的可以匹配Brixton.SR7 如果要使用boot 1.4x 相应要使用Camden

image.png

Spring boot使用的一些小tips

要使用spring cloud的话那么一定离不开spring boot

${random.int}、${random.long}、${random.value}、${random.int(10)}、${random.int[10,20]}来产生随机穿,通常用于秘钥的生成

Spring boot的原生监控:

在阿里巴巴的徐雷大神那里听到这个名词,是我初识actuator监控这个springboot提供的监控组件.该组件将一些原生的端点分为应用配置类,操作类,度量运行状态类.

类似的监控和调试软件,目前我觉得最好用的是阿里巴巴开源的arthas

他有类的热替换,以及线程的信息dump和trace的追踪并且分析每一步的执行时间等等功能
arthas点击这里

服务治理组件 eureka

对于一个微服务的应用来说,服务的治理是不可或缺的,对于一个微服务的项目,可能在服务多的时候无法有效的管理,那么就无法保证项目高效稳定的运行.

客户端与服务端的概念:
服务端:我们的注册中心就是eureka的服务端,支持集群配置,但是如果集群中有分片故障,eureka就会进入自我保护模式,但是如果以集群部署,准许提供服务的注册和发现,当有故障的分片恢复时,会自动同步服务。但是其同步服务状态策略为异步,在某个时间点内,服务的状态可能不同。
客户端:通过注解和配置嵌入在代码中,客户端想注册中心注册自己提供的服务并且周期性的发送心跳包,保证服务的可用,同时也可以通过注册中心刷新我们更改的状态,改变其自身提供服务的状态。

接下来也随手搭了一个eureka的聚合框架,既然要做就做一个聚合工程,为后期做其他项目做一个准备,目前的结构如下图


项目初始的结构图

接下来是一个eureka所需要的maven依赖和yml的配置
maven依赖如下,只截取了dependencies部分

 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
        </dependency>
    </dependencies>

yml配置如下

spring:
  profiles:
    #激活的标签
    active: dev
  application:
    name :maturecloud-eureka

server:
  #该项目占用的端口
  port: 8761


eureka:
  server:
    #不进入自我保护模式<不注销服务,在生产环境请替换>
    enable-self-preservation: false
    #清楚失效的服务的时间,默认时间也是60000,源码中有
    eviction-interval-timer-in-ms: 60000
  instance:
    hostname: localhost
  client:
    #服务端同时也是一个客户端,本身不注册
    register-with-eureka: false
    #不去拉取注册的服务,只管理服务
    fetch-registry: false
    service-url:
      #这里其实是一个map,设置了serviceUrl,如果想自定义我们可以在client下自定义region,再进行设置(下面给示例) 因为这里使用了security所以要提供账号密码
      defaultZone: http://root:root@${eureka.instance.hostname}:${server.port}/eureka
#为保证安全,集成了security框架,这里设置账号密码
security:
  basic:
    enabled: true
  user:
    name: root
    password: root


下图可理解为集群状态下,向不同的zones注册

spring:
  profiles:
    active: dev
  application:
    name: "@pom.artifactId@"

server:
  port: 8761


eureka:
  server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 60000
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
#      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
        zz: http://${eureka.instance.hostname}:${server.port}/zz
        zy: http://${eureka.instance.hostname}:${server.port}/zy
    region: zzy
    availability-zones: 
      zzy: zz,zy
security:
  basic:
    enabled: true
  user:
    name: root
    password: root


eureka用在分布式项目中可以搭建一个高可用的注册中心,保证高可用,在某个结点宕机时不影响使用。
我们在这里搭建一个双节点的注册中心为例。
为此我创建了两个环境的eureka来单独启动,并让他们相互注册,那么就会在对方的地址注册分片,具体的流程如下。
第一个结点的配置如下

spring:
  application:
    name: maturecloud-eureka

server:
  port: 8761


eureka:
  server:
    eviction-interval-timer-in-ms: 60000
  instance:
    hostname: eureka-master
  client:
    service-url:
      defaultZone: http://root:root@eureka-spare:8762/eureka



第二个结点的配置如下

spring:
  application:
    name: maturecloud-eureka

server:
  port: 8762


eureka:
  server:
    eviction-interval-timer-in-ms: 60000
  instance:
    hostname: eureka-spare
  client:
    service-url:
      defaultZone: http://root:root@eureka-master:8761/eureka



另外使用idea配置两个server的启动


idea配置

启动的激活的条件不同,那么使用的配置文件就不同
--spring.profiles.active=spare 使用application-spare.yml
--spring.profiles.active=master 使用application-master.yml

注意:这里如果要建立一个高可用的服务中心,那么一定要将我们单点注册的配置更改掉,如下可将配置改为true,或者不写(不配置默认为true)。
还有一点,如果有多个配置文件,如application.yml application-spare.yml application-master.yml 那么有一些配置是会被application.yml中的配置覆盖掉的

 register-with-eureka: true
 fetch-registry: true

搭建出来的每个结点是向其他结点注册的,这样就可以同步其他结点的状态与服务,不用担心单一结点挂掉导致的宕机,保证了高可用性。


高可用的注册中心

如果我们想要让其他服务,我们需要对服务的配置文件进行一些修改。
我们需要对两个服务中心进行注册,如果其中一个服务中心挂掉不会影响我们服务的调用。

server:
  port: 8099
spring:
  application:
    name: maturecloud-login
eureka:
  client:
    service-url:
      defaultZone: http://root:root@eureka-master:8761/eureka/,http://root:root@eureka-spare:8762/eureka/

8761,8762效果图和下图一致


服务注册

以下是关于eureka.client的配置说明


eureka.client配置
上一篇 下一篇

猜你喜欢

热点阅读