天天看点

SpringCloud:Ribbon负载均衡

在消费者服务上使用Ribbon

1.导入Ribbon依赖

<!--导入Eureka和Ribbon-->
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
           

2.修改配置

修改application.yaml文件。这里是为了连接Eureka集群

#Eureka配置
eureka:
  client:
    register-with-eureka: false #不向Eureka注册自己
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #默认连接的Server的Url
           

3.在ConfigBean中为getRestTemplate方法添加注解

添加@LoadBalanced注解,启用Ribbon负载均衡功能

@Configuration
public class ConfigBean {   //@Configuration -->相当于 spring applicationContext.xml
    配置负载均衡实现RestTemplate。将这个类注册到Bean,交给Spring托管
    @Bean
    @LoadBalanced   //Ribbon
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}
           

4.修改DeptController中连接常量

@RestController
public class DeptConsumerController {
    //消费者不应该有Service层
    //RestTemplate...供我们调用就可以了。需要先将他注册进Spring
    //(url,实体:Map,Class<T> responseType)
    @Autowired
    private RestTemplate restTemplate;  //提供多种便捷访问Http服务的方法,简单的Restful服务模板

    //常用请求是localhost:8001/xxx,我们将这个前缀定义成常量方便使用
    // 使用Ribbon实现时,这里应该是个变量,故注释掉,用服务名访问
    //private static final String REST_URL_PREFIX = "http://localhost:8001";
    private static final String REST_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT";
           

5.为主启动类添加@EnableEurekaClient注解

添加该注解,以使其访问Eureka集群,在其中找服务

package com.jlu.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

//Eureka和Ribbon整合后,客户端可以直接调用,不用关心IP地址和端口号
@SpringBootApplication
@EnableEurekaClient
public class DeptConsumer_80 {
    public static void main(String[] args) {
        SpringApplication.run(DeptConsumer_80.class,args);
    }
}

           

开始测试

由于Ribbon的原理是:连接Eureka注册中心集群,在集群中获取可以使用的微服务。

之前我们只有一个8001提供者服务,现在我们创建另外两个,形成小集群

0.新建两个数据库

新建DB02和DB03数据库,类似之前的DB01,这里不再赘述。

1.新建模块

新建普通maven项目,取名为springcloud-provider-dept-8002和springcloud-provider-dept-8002

修改其内容,使其成为新提供者

注意:这三个提供者模块的spring.application.name必须一致!才能形成集群

spring:
  application:
    name: springcloud-provider-dept
           

2.启动进行测试

继续阅读