springcloud实践-ribbon实现负载均衡
这次的代码基于下面这两篇
SpringCloud服务拆分实践
springcloud-Eureka集群实战
1、修改数据库和对应实体类
springcloud-api模块的实体类加上如下代码
private String db;
2、在修改springcloud-consumer-user-80模块
1. 修改pom.xml
完整代码如下,主要添加了ribbon、eureka的依赖
<?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>springcloud</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud-consumer-user-80</artifactId>
<dependencies>
<!-- ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!-- eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!-- 我们需要拿到实体类 ,所以配置api module -->
<dependency>
<groupId>org.example</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- springboot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 热部署工具 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
2. 修改配置
完整代码如下,主要添加了Eureka配置
server:
port: 80
spring:
application:
name: springcloud-consumer-user
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
username: root
password: 520China
# Eureka配置
eureka:
client:
register-with-eureka: false # 不向Eureka注册自己
service-url:
defaultZone: http://ybg.eureka1.com:7001/eureka/,http://ybg.eureka2.com:7002/eureka/ # 向哪个地方获取Eureka服务
3. 修改配置类
修改ConfigBean配置类,加入ribbon支持负载均衡的注解@LoadBalanced
package com.hzxy.springcloud.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ConfigBean {
// @Configuration -- spring applicationContext.xml
// 配置负载均衡实现RestTemplate
@Bean
@LoadBalanced //ribbon
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
4. 修改controller
把之前的ip+端口,改为现在的服务名
package com.hzxy.springcloud.controller;
import com.hzxy.springcloud.model.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.List;
@RestController
public class UserController {
@Resource
private RestTemplate restTemplate; //提供多种便捷访问远程http服务方法,简单的Restful服务模板
// private static final String REST_URL = "http://localhost:8001/hello";
//ribbon 我们这里的地址,应该是一个变量,通过服务名来访问
private static final String REST_URL = "http://springcloud-provider-user/hello";
@RequestMapping("/hi")
public List<User> Hi(){
return restTemplate.getForObject(REST_URL,List.class);
}
}
5. 修改启动类
添加一个Eureka的注解,@EnableEurekaClient 把它变成Eureka的客户端
package com.hzxy.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
// ribbon 和 Eureka 整合以后,客户端可以直接调用,不用关心ip地址和端口号
@SpringBootApplication
@EnableEurekaClient //自动配置
public class Consumer_80 {
public static void main(String[] args) {
SpringApplication.run(Consumer_80.class,args);
}
}
3、再复制两份springcloud-provider-user-8001模块,端口改为8002、8003
1. 分别创建两个数据库和原来的数据库一样,db字段不一样
如图
2. 新建两个模块端口改为8002、8003
如图
3. 把8001的代码全部复制过去,并修改配置
修改如下三处,表示端口和数据库
复制完后就行了
4、测试
如图,我们启动两个注册中心,三个服务提供者和一个消费者
访问http://ybg.eureka1.com:7001/、http://ybg.eureka1.com:7002/,可以看到,三个服务在两个注册中心都注册了
访问多次http://ybg.eureka1.com/hi,可以看到db字段不同,代表是访问不同的服务提供者,做到了负载均衡
测试成功!