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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM