javascript
SpringCloud Ribbon实战(三)
接著上一篇關于ribbon介紹(服務提供者只有一個我們似乎沒有感覺到負載均衡)我們接著講ribbon真正的負載均衡
我們就多創建兩個微服務提供者,怎么創建微服務工程之前我們就講過了這里不在多說,如果不懂請參考https://blog.csdn.net/ywl470812087/article/details/102636250
下面就是創建好的
?
1,pom.xml文件jar包依賴
microservicecloud-provider-dept-8002微服務工程pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>microservicecloud</artifactId><groupId>com.atguigu.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>microservicecloud-provider-dept-8002</artifactId><dependencies><!-- 引入自己定義的api通用包,可以使用Dept部門Entity --><dependency><groupId>com.atguigu.springcloud</groupId><artifactId>microservicecloud-api</artifactId><version>${project.version}</version></dependency><!-- actuator監控信息完善 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- 將微服務provider側注冊進eureka --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- 修改后立即生效,熱部署 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional><scope>true</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--fork : 如果沒有該項配置,可能這個devtools不會起作用,即應用不會restart--><fork>true</fork></configuration></plugin></plugins></build></project>microservicecloud-provider-dept-8003微服務工程pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>microservicecloud</artifactId><groupId>com.atguigu.springcloud</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>microservicecloud-provider-dept-8003</artifactId><dependencies><!-- 引入自己定義的api通用包,可以使用Dept部門Entity --><dependency><groupId>com.atguigu.springcloud</groupId><artifactId>microservicecloud-api</artifactId><version>${project.version}</version></dependency><!-- actuator監控信息完善 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- 將微服務provider側注冊進eureka --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- 修改后立即生效,熱部署 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional><scope>true</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><!--fork : 如果沒有該項配置,可能這個devtools不會起作用,即應用不會restart--><fork>true</fork></configuration></plugin></plugins></build></project>2,yml配置文件
注意:#數據庫密碼根據自己的mysql來配置
server:port: 8002mybatis:config-location: classpath:mybatis/mybatis.cfg.xml #mybatis所在路徑type-aliases-package: com.atguigu.springcloud.entities #entity別名類mapper-locations:- classpath:mybatis/mapper/**/*.xml #mapper映射文件spring:application:name: microservicecloud-dept datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: org.gjt.mm.mysql.Driverurl: jdbc:mysql://localhost:3306/cloudDB02username: rootpassword: xxxx #數據庫密碼根據自己的mysql來配置dbcp2:min-idle: 5initial-size: 5max-total: 5max-wait-millis: 200eureka:client: #客戶端注冊進eureka服務列表內service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/instance:instance-id: microservicecloud-dept8002 #自定義服務名稱信息prefer-ip-address: true #訪問路徑可以顯示IP地址info:app.name: atguigu-microservicecloudcompany.name: www.atguigu.combuild.artifactId: $project.artifactId$build.version: $project.version$ server:port: 8003 #端口mybatis:config-location: classpath:mybatis/mybatis.cfg.xml #mybatis所在路徑type-aliases-package: com.atguigu.springcloud.entities #entity別名類mapper-locations:- classpath:mybatis/mapper/**/*.xml #mapper映射文件spring:application:name: microservicecloud-dept datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: org.gjt.mm.mysql.Driverurl: jdbc:mysql://localhost:3306/cloudDB03 username: rootpassword: xxxx #數據庫密碼根據自己的mysql來配置dbcp2:min-idle: 5initial-size: 5max-total: 5max-wait-millis: 200eureka:client: #客戶端注冊進eureka服務列表內service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/instance:instance-id: microservicecloud-dept8003 #自定義服務名稱信息prefer-ip-address: true #訪問路徑可以顯示IP地址info:app.name: atguigu-microservicecloudcompany.name: www.atguigu.combuild.artifactId: $project.artifactId$build.version: $project.version$最關鍵的一點注意:微服務實例不能變統一??microservicecloud-dept
spring:application:name: microservicecloud-dept之前我們講過每個微服務可以擁有自己獨立的數據庫,這里我們就創建其他兩個數據庫
clouddb02? ?創建腳本(初始化幾條數據)
DROP DATABASE IF EXISTS clouddb02 ; CREATE DATABASE clouddb02 CHARACTER SET UTF8; USE clouddb02; CREATE TABLE dept (deptno BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT ,dname VARCHAR(60),db_source VARCHAR(60) );INSERT INTO dept(dname,db_source) VALUES('開發部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('人事部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('財務部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('市場部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('運維部',DATABASE());SELECT * FROM dept;clouddb03? ?創建腳本(初始化幾條數據)
DROP DATABASE IF EXISTS clouddb03 ; CREATE DATABASE clouddb03 CHARACTER SET UTF8; USE clouddb03; CREATE TABLE dept (deptno BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT ,dname VARCHAR(60),db_source VARCHAR(60) );INSERT INTO dept(dname,db_source) VALUES('開發部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('人事部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('財務部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('市場部',DATABASE()); INSERT INTO dept(dname,db_source) VALUES('運維部',DATABASE());SELECT * FROM dept;?
3,拷貝microservicecloud-provider-dept-8001到其他兩個微服務工程
這里我就不講了,相信大家都會。拷貝完成之后我們需要把主啟動類的名字分別改成:DeptProvider8002_App? ? ? ? ? ? ? ? ? ?DeptProvider8003_App
package com.atguigu.springcloud;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication @EnableEurekaClient //本服務啟動后會自動注冊進eureka服務中 @EnableDiscoveryClient //服務發現 public class DeptProvider8001_App {public static void main(String[] args) {SpringApplication.run(DeptProvider8001_App.class, args);} }?
拷貝和修改完成我們的3個微服務提供者就配置完成
??下面我們就來測試一下:
1,首先啟動eureka集群,如果不懂eureka集群請參考學習這篇文章,這里就不多說了
2,啟動3個微服務提供者,如果不懂微服務提供者實現請參考https://blog.csdn.net/ywl470812087/article/details/102535582
自測啟動是否成功:
3,啟動客戶端消費者
注意:現在consumer可是帶著@LoadBalanced算法的
訪問:http://localhost/consumer/dept/list
再次訪問:http://localhost/consumer/dept/list
再次訪問:http://localhost/consumer/dept/list
看見沒有訪問返回的結果是不是可以看出已經起到了負載均衡的效果輪詢訪問。
從注冊中心我們也可以看見一個微服務下掛著三個實例
以上ribbon的負載均衡已經講解完畢是不是覺得很簡單
總結:Ribbon就是軟負載均衡的客戶端組件,可以和其他所需請求的客戶端結合使用,和eureka結合只是其中一個實例
?
?
?
總結
以上是生活随笔為你收集整理的SpringCloud Ribbon实战(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nand Flash基础知识与坏块管理机
- 下一篇: DM368开发 -- 常用指令演示