欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spring_cloud开发时常用技术的使用与配置

程序员文章站 2022-04-22 11:38:55
一、为什么使用spring_cloud完成分布式开发SpringBoot开发一个服务器级别的组件非常容易,但是会产生很多麻烦,我们知道分布式会开发较多的服务器级别的组件,他们之间的数据交互都是服务器级别的,并且每个服务器组件都有属于自己的配置文件,管理起来非常的不好受,所以我们使用cloud来开发,就可以解决这些问题二、spring_cloud分布式开发cloud使用以下的技术来解决上面的问题1.eureka 注册服务器组件将服务器组件注册到一个服务器中使用eureka导入依赖启动类上加上 @...

一、为什么使用spring_cloud完成分布式开发

单独使用SpringBoot开发一个服务器级别的组件非常容易,但是会产生很多麻烦,我们知道分布式会开发较多的服务器级别的组件,他们之间的数据交互都是服务器级别的,并且每个服务器组件都有属于自己的配置文件,管理起来非常的不好受,所以我们使用cloud来开发

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等

当他们结合起来使用,就可以解决这些问题

二、spring_cloud分布式开发

cloud使用以下的技术来解决上面的问题
1.eureka 注册服务器组件
将服务器组件注册到一个服务器中
使用eureka导入依赖
启动类上加上 @EnableEurekaServer

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

application.yml配置如下

#服务器的端口号
server:
  port: 7000
#服务器的名字
spring:
  application:
    name: registerSys
eureka:
  instance:
    hostname: 127.0.0.1  #服务器的IP地址
  client:
    register-with-eureka: false # 是否注册自己的信息到EurekaServer,默认是true
    fetch-registry: false # 是否拉取其它服务的信息,默认是true
    serviceUrl:    #服务器向外发布的地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

2.feigin 远程调用
服务器级别组件数据交互就像调用本地的数据一样
使用feign导入依赖

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

在启动类上加上 @EnableFeignClients //feign远程调用注解

书写一个接口加上 @FeignClient(“clientone”) 注解
clientone 是服务器组件的注册名字
接口中的方法必须和要调用的方法一样

3.ribbon 负载均衡
Ribbon是一个基于HTTP和TCP的客户端负载均衡器,当我们将Ribbon和Eureka一起使用时,Ribbon会从Eureka注册中心去获取服务端列表有相同注册名的服务器组件,然后进行轮询访问以到达负载均衡的作用,这个功能封装在eureka依赖中所以导入依赖和上面的eureka一样

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

所以注册到注册服务器的服务器的启动类加上注解
@EnableEurekaClient //注册客户端,负载均衡rabbon

application.yml配置如下

#服务器的端口号
server:
  port: 7001
#服务器的名字
spring:
  application:
    name: clientone
eureka:
  instance:
    hostname: 127.0.0.1  #服务器的IP地址
  client:
    serviceUrl:    #服务器向外发布的地址
      defaultZone: http://127.0.0.1:7000/eureka/

4.hystrix 熔断 防止链式反应
导入的依赖

  <!--熔断-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
 启动类上的注解@EnableCircuitBreaker //熔断

调用方法的类 详细看里面的注释

@Service
public class NomalService {
    @Autowired
    private FeignService feignService;
    //当这个服务调用失败时调用hellofailred
    @HystrixCommand(fallbackMethod = "hellofailred")
    public String hello(){
        return feignService.info();
    }
    //    当上面的访问服务器出错就会访问下面的方法
    public String hellofailred(){
        return "当前服务器不能访问";
    }
}

5.config 配置 解决配置管理问题
这儿要注意到依赖导入问题,配置服务导入的依赖和客户端导入的依赖是不同的
配置服务器导入的依赖

    <!--配置服务-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>

客户端导入的依赖

 <!--配置客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

使用config配置服务器后
将客户端的application.yml改为bootstrap.yml
为什么?因为bootstrap.yml的优先级要高于application.yml

然后config配置服务器这边的配置文件如下,configfile文件下的配置文件为其他客户端服务器的配置文件,里面的配置还是和以前一样写,但是客户端服务器下的bootstrap.yml配置文件要指向配置服务器

spring_cloud开发时常用技术的使用与配置
bootstrap.yml配置如下

spring:
  application:
    name: clientone
  cloud:
    config:
      profile: dev      #后缀
      uri: http://127.0.0.1:8888/ #配置服务器的地址

config服务器配置如下
aplication.yml

spring:
  profiles:
    active: native  #本地的

application-native.yml

server:
  port: 8888
spring:
  application:
    name: configServer  #注册服务器名
  cloud:
    config:
      server:
        native:
          search-locations: classpath:/configfile/ #搜索位置(各个配置文件的存放处)

6.API 网关 使用zuul (过滤和路由)
导入的依赖

   <!--网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>

启动类加的注解 @EnableZuulProxy //网关代理

过滤器类的方法

@Component
public class MyFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";// 前置过滤器
//        pre:可以在请求被路由之前调用
//        route:在路由请求时候被调用
//        post:在route和error过滤器之后被调用
//        error:处理请求时发生错误时被调用
    }
    @Override
    public int filterOrder() {
        return 0;//优先级为0,数字越大,优先级越低
    }
    @Override
    public boolean shouldFilter() {
        return true;//是否过滤
    }
    @Override
    public Object run() throws ZuulException {
        System.out.println("进入过滤器");
        return null;
    }
}

本文地址:https://blog.csdn.net/qq_45710884/article/details/109276329

相关标签: spring_cloud spring