昨天我作了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壓力。
你們共同努力哈,共同努力進步