1、SpringCloud简介

SpringCloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、负载均衡、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑

建议使用https://start.spring.io/去生成demo,使用其中的pom依赖信息

2、服务注册与发现

  SpringCloud使用注册中心Eureka

  Dubbo注册中心zk

1、Eureka搭建

1、依赖

  一定加dependencyManagement,springboot版本1.5.21亲测有效

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

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

2、添加配置文件

server:
  port: 8888
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

 3、启动

 

 4、高可用

服务端相互注册即可,客户端注册的信息会自动同步

 

 2、服务注册(provider)

1、依赖

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

2、配置文件

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka/
server:
  port: 8762
spring:
  application:
    name:eureka-provider

3、启动

 

 

 正常编写controller即可

 3、服务消费(Consumer)

 1、依赖

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.21.RELEASE</version>
<relativePath />
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId> <!-- 负载均衡 -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

2、配置文件

eureka:

  client:

    serviceUrl:

      defaultZone: http://localhost:8888/eureka/

server:

  port: 8764

spring:

  application:

    name: eureka-consumer

3、服务消费

 

 3、负载均衡Ribbon

 1、依赖

  参照上面负载均衡注释依赖

 2、添加注解

  参照上面图

  @LoadBalanced,默认轮询策略

 4、接口网关zuul

1、作用

  拦截请求,你想做啥就做啥

  特点:核心是一系列过滤器

  

2、网关搭建

1、依赖

  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-zuul</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

  </dependencies>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Edgware.SR6</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

2、配置信息

  eureka:
    client:
      serviceUrl:
        defaultZone: http://localhost:8888/eureka/
  server:
    port: 8769
  spring:
    application:
      name: service-zuul
  zuul:
    routes:
      api-a:  #自定义路由,其中path需指定
        path: /api-provider/**
        service-id: eureka-provider

        sensitiveHeaders: #将敏感头设置为空,能够传递cookie信息
      api-b:
        path: /api-consumer/**
        service-id: eureka-consumer

3、启动

 

 3、zuul拦截请求

  extends ZuulFilter

 4、排除路由

  

 

 

5、Feign

1、依赖

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

 

2、配置

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8888/eureka/
server:
  port: 8765
spring:
  application:
    name: service-order-feign

 

3、接口调用

 

 4、启动

 

6、分布式配置中心

1、依赖

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

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

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

2、服务端

添加EnableConfigServer注解

添加配置:

 

查看配置文件

http://localhost:8080/application.name-profile.yml

3、客户端

添加client依赖

修改配置文件名称为bootstrap.yml,表示先执行本配置。不需要application.yml配置文件。

注意配置eureka地址,因为是通过eureka去访问CONFIG服务。

注意点:若存在order,order-dev配置文件,会将order和order-dev配置合并,所以order中一般放置公共的配置信息。

配置内容,表示拉取order-dev.yml文件

 

 

4、配置热生效

引入依赖:spring-cloud-starter-bud-amqp(服务端和客户端),需要rabbitmq

config项目中暴露接口

启动后能看到路径

 

 

 在使用配置的类上增加注解@RefreshScope

 请求接口:http://localhost/8080/actuator/bus-refresh后生效

继承github的webhook:

    在github上配置地址:http://url/monitor

7、Hystrix

1、作用

  熔断机制:下游服务出现问题后,为保证整个系统正常运行下去,而提供一种降级服务的机制,通过返回缓存数据或者既定数据,避免出现系统整体雪崩效应

  服务降级:调用本地fallback,返回错误信息等

  服务雪崩:分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况称为服务雪崩效应。超时机制,服务降级,

  插入:调整springboot内置线程数:server.tomcat.max-threads

  雪崩效应解决方法:

    1、超时机制

    2、降级处理,相当于调用接口错误的处理

    3、熔断机制

    4、隔离机制,每个接口资源隔离,如线程池等

    5、限流机制,

 2、Hystrix实现服务降级

1、依赖

<dependency>

      <groupId>org.springframework.cloud</groupId>

      <artifactId>spring-cloud-starter-hystrix</artifactId>

</dependency>

2、配置

  feign:

    hystrix:

      enabled: true

  hystrix:

    command:

      default:

        execution:

          isolation:

            thread:

              timeoutInMilliseconds: 5000 #hystrix默认调用接口超时时间为1s

3、编写fallback实现feign接口

@Component

public class FeignServiceFallBack implements FeignService {

  @Override
  public List<String> getUsers() {
    List<String> arrayList = new ArrayList<>();
    arrayList.add("getUsers service error");
    return arrayList;
  }

}

4、Feign注解添加fallback指定类

@FeignClient(value="eureka-provider",fallback=FeignServiceFallBack.class)
public interface FeignService {
  @RequestMapping("/getUsers")
  public List<String> getUsers();
}

 

 

 

posted on 2019-11-09 12:25  dysdhd  阅读(205)  评论(0编辑  收藏  举报