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壓力。

 

你們共同努力哈,共同努力進步

相關文章
相關標籤/搜索