【Ribbon篇四】Ribbon初步配置(2)

一. 微服務消費者改造

注:修改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結合只是其中的一個實例。

相關文章
相關標籤/搜索