昨天我做了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壓力。
大家共同努力哈,共同努力進步