spring-cloud构建多提供者轮询

昨天我作了Eureka-Server注册中心的集群,那么咱们知道在分布式架构中,最大的特色是微服务能够独立运行,每一个模块有本身独立的数据库mysql

今天,咱们来看下如何设置多个提供者,意思就是为了减轻数据库的压力,咱们能够建立多个相同的提供者,而且建立多个数据库(存放一样的数据)spring

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

如何搭建eureka服务注册与发现,能够翻阅我以前的博客,以及Eureka Server 集群数据库

下面看下今天的功能步骤tomcat

一、首先默认建立两个相同的提供者mybatis

 

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

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

数据库中存放的数据应该是彻底相同的,但此处为了后期演示方便,我会对另一个数据库进行更改一条数据负载均衡

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/

 

四、修改完yml文件后,在消费者模块中,咱们须要修改以前的配置类,开启负载均衡,默认轮询的方式去访问不一样的提供者

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

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

@Configuration
public class RestConfig {

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

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

 

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

注意:

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

六、此时至关于这两个相同功能的提供者都注册了,咱们在消费者接口经过RestTemplate调用

 

七、效果 

 

 

 

 

八、小技巧,咱们在配置中须要其余地方的信息时,能够经过${}来获取,这样之后咱们再修改的时候,只要修改上面的信息就行

 

 

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

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

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

 

你们共同努力哈,共同努力进步

相关文章
相关标签/搜索