注:修改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结合只是其中的一个实例。