一. 微服务消费者改造
注:修改microservicecloud-consumer-dept-80工程
1. pom.xml添加依赖
<!-- 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的服务注册地址
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注解
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=大数据部
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结合只是其中的一个实例。