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字段不同,代表是访问不同的服务提供者,做到了负载均衡
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试成功!

猜你喜欢

转载自blog.csdn.net/weixin_43520670/article/details/114271291
今日推荐