zoukankan      html  css  js  c++  java
  • spring-cloud构建多提供者轮询

    昨天我做了Eureka-Server注册中心的集群,那么我们知道在分布式架构中,最大的特点是微服务可以独立运行,每个模块有自己独立的数据库

    今天,我们来看下如何设置多个提供者,意思就是为了减轻数据库的压力,我们可以创建多个相同的提供者,并且创建多个数据库(存放同样的数据)

    通过消费者接口负载均衡策略对多个相同的提供者进行轮询访问

    如何搭建eureka服务注册与发现,可以翻阅我之前的博客,以及Eureka Server 集群

    下面看下今天的功能步骤

    1、首先默认创建两个相同的提供者

    2、内部业务逻辑代码都可直接复制黏贴,包括pom.xml文件的依赖,mybatis全局配置文件,mapper映射文件

    3、将yml文件复制过来后要注意更改当前提供者所需要的数据库信息,以及对应端口号等信息

    数据库中存放的数据应该是完全相同的,但此处为了后期演示方便,我会对另外一个数据库进行更改一条数据

    tx表中 的数据

    users表中的数据

    #之前的一个提供者
    server:
        port: 8001
    #mybatis的设置
    mybatis:
        config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径
        type-aliases-package: com.ghh.bean # 通过关系映射扫描所有bean别名类所在包
        mapper-locations: classpath:mybatis/mapper/**/*.xml # mapper映射文件
    spring:
        application:
          name: microservice-product #这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name
          #对外报漏的微服务名字,在服务注册中心中application下的字段值,eureka会自动变成全大写
        datasource:
            type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
            driver-class-name: com.mysql.cj.jdbc.Driver # mysql驱动包
            url: jdbc:mysql://127.0.0.1:3306/users?serverTimezone=GMT%2B8 # 数据库名称
            username: root
            password: root
            dbcp2:
                min-idle: 5 # 数据库连接池的最小维持连接数
                initial-size: 5 # 初始化连接数
                max-total: 5 # 最大连接数
                max-wait-millis: 150 # 等待连接获取的最大超时时间
    eureka:
      instance:
        instance-id: ${spring.application.name}:${server.port}   #我的暴露名和端口号
        prefer-ip-address: true  #访问路径可以显示ip
    
      client:
        register-with-eureka: true #服务注册 true 注册到服务中心
        fetchRegistry: true   # true 获取注册信息
        service-url:    #注册到指定的注册中心或集群
          defaultZone: http://Eureka7001.com:7001/eureka/,http://Eureka6001.com:6001/eureka/

    #复制过来的yml更改

    server:
        port: 8002           #修改当前提供者的端口号
    #mybatis的设置
    mybatis:
    config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路径
    type-aliases-package: com.ghh.bean # 通过关系映射扫描所有bean别名类所在包
    mapper-locations: classpath:mybatis/mapper/**/*.xml # mapper映射文件
    spring:
    application:
    name: microservice-product #这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name
    #对外报漏的微服务名字,在服务注册中心中application下的字段值,eureka会自动变成全大写
    datasource:
    type: com.alibaba.druid.pool.DruidDataSource # 当前数据源操作类型
    driver-class-name: com.mysql.cj.jdbc.Driver # mysql驱动包
    url: jdbc:mysql://127.0.0.1:3306/tx?serverTimezone=GMT%2B8 # 数据库名称
    username: root
    password: root
    dbcp2:
    min-idle: 5 # 数据库连接池的最小维持连接数
    initial-size: 5 # 初始化连接数
    max-total: 5 # 最大连接数
    max-wait-millis: 150 # 等待连接获取的最大超时时间
    eureka:
    instance:
    instance-id: microserivce_cloud_07_provide_product_8002
    prefer-ip-address: true #访问路径可以显示ip
    client:
    register-with-eureka: true #服务注册 true 注册到服务中心
    fetchRegistry: true # true 获取注册信息
    service-url: #注册到指定的注册中心或集群
    defaultZone: http://Eureka7001.com:7001/eureka/,http://Eureka6001.com:6001/eureka/

    4、修改完yml文件后,在消费者模块中,我们需要修改之前的配置类,开启负载均衡,默认轮询的方式去访问不同的提供者

      此处切记一定不要忘记@LoadBalanced 注解,

    Ribbo的负载均衡策略,@LoadBanlanced的默认是轮询,从服务列表中拿到一个服务对应的几个实例,对他们进行默认轮询访问。

    @Configuration
    public class RestConfig {
    
        @Bean    //通过RestTemplate来实现调用接口
        @LoadBalanced     //表示RestTemplate开启了负载均衡
        public RestTemplate getRestTemplate(){
            return  new RestTemplate();
        }
    }

    5、前面我们配置的spring:application:name:会发现两个提供者是一样,此配置,是将当前模块姓名暴露给其他模块,

     此时启动后会在server的服务中心看到多了一个此微服务,且后面有两个,Eureka会默认将我们姓名变大写

    注意:

      此处切记我们在yml文件中的 MICROSERVICE-PRODUCT 不能写成MICROSERVICE_PRODUCT,下划线Eureka是不支持的

    6、此时相当于这两个相同功能的提供者都注册了,我们在消费者接口通过RestTemplate调用

    7、效果 

    8、小技巧,我们在配置中需要其他地方的信息时,可以通过${}来获取,这样以后我们再修改的时候,只要修改上面的信息就行

     总结:轮询的方式说到底还是为了缓解tomcat和mysql的压力,我们以后开发分布式架构的项目时,各个微服务,不会放在同一个tomcat中,实现

    完完全全的解耦,所以Eureka通过服务注册中心,每一个微服务启动后,到这来注册,通过心跳Server去监控每一个微服务,对访问量比较大的地方

    使用多个提供者,多个数据库,并在消费者接口处采用轮询的方式去减轻tomcat压力。

    大家共同努力哈,共同努力进步

  • 相关阅读:
    思科交换机端口安全配置
    华为交换机端口安全配置
    多行文本出现省略号必备的条件(面试题)
    单行文本出现省略号必备的条件(面试题)
    让多个元素在一行显示的方法和技巧(面试题)
    overflow的多个作用
    雪碧图的使用和制作技巧
    列举background属性的8个属性值(面试题)
    background-origin设置背景图像的参考原点(位置)
    background-clip设置对象的背景图像向外裁剪的区域
  • 原文地址:https://www.cnblogs.com/guanyuehao0107/p/11819375.html
Copyright © 2011-2022 走看看