注:修改microservicecloud-consumer-dept-80工程mysql
1. pom.xml添加依賴spring
<!-- eureka client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- eureka config --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!-- ribbon --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
2. application.properties添加eureka的服務註冊地址sql
eureka.client.register-with-eureka=false eureka.client.service-url.defaultZone=http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
3. 使用@LoadBalanced修飾RestTemplate實例,得到Rest時加入Ribbon的配置數據庫
@Bean @LoadBalanced public RestTemplate getRestTemplate(){ return new RestTemplate(); }
4. 啓動類添加@EnableEurekaClient註解app
5. 修改客戶端訪問類(Controller)負載均衡
//private static final String REST_URL_PREFIX = "http://localhost:8001"; //MICROSERVICECLOUD-DEPT是服務提供者的實例名稱的大寫 private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";
6. 先啓動3個eureka server,再啓動服務提供者並註冊到eureka,最後啓動服務消費者。運維
http://localhost/consumer/dept/get/1
http://localhost/consumer/dept/list
http://localhost/consumer/dept/add?deptName=大數據部ide
Ribbon和Eureka整合後Consumer能夠直接調用服務而不用再關心地址和端口號。微服務
1. 參考microservicecloud-provider-dept-8001,新建兩份,分別命名爲microservicecloud-provider-dept-8002,microservicecloud-provider-dept-8003,包括pom.xml、配置文件、源碼等。測試
2. 新建8002/8003數據庫,各自微服務分別連各自的數據庫
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;
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. 修改application.properties
注:8001/8002/8003服務提供者的spring.application.name應用名必須是相同的(即對外暴露的統一的服務實例名)。
microservicecloud-provider-dept-8001的application.properties修改以下:
eureka.instance.instance-id=microservicecloud-dept8001
microservicecloud-provider-dept-8002的application.properties修改以下:
server.port=8002
spring.datasource.url=jdbc:mysql://192.168.178.5:12345/cloudDB02?characterEncoding=utf-8 eureka.instance.instance-id=microservicecloud-dept8002
microservicecloud-provider-dept-8003的application.properties修改以下:
server.port=8003 spring.datasource.url=jdbc:mysql://192.168.178.5:12345/cloudDB03?characterEncoding=utf-8 eureka.instance.instance-id=microservicecloud-dept8003
4. 先啓動eureka server集羣,再啓動8001/8002/8003,完成測試
http://localhost:8001/dept/list
http://localhost:8002/dept/list
http://localhost:8003/dept/list
5. 啓動microservicecloud-consumer-dept-80,客戶端經過Ribbo完成負載均衡
http://localhost/consumer/dept/list
注意觀察看到返回的數據庫名字,各不相同,負載均衡實現。
總結:Ribbon其實就是一個軟負載均衡的客戶端組件,它能夠和其餘所需請求的客戶端結合使用,和eureka結合只是其中的一個實例。