spring-cloud微服务(3) 实现负载均衡ribbon

文章目录

  • 概述
  • 效果图
  • 项目结构
    • 1. application.properties配置
    • 2. 启动类
    • 3. 配置控制层和服务层逻辑
    • 4. pom配置
  • 工程的启动

概述

访问指定服务,实现负载均衡,即访问相同服务名提供者,不同客户端提供的不同端口,可以设置轮询/随机/权重。
不同客户端之前的访问,也是要通过负载均衡来完成。
spring-cloud微服务(3) 实现负载均衡ribbon_第1张图片

效果图

注册中心,注册了3个客户端,ribbon和两个erueka-client
spring-cloud微服务(3) 实现负载均衡ribbon_第2张图片
访问ribbon的网址,ribbon会访问指定服务端名,调用集群,反复刷新页面,会看到8092或者8091的端口号被调用。
spring-cloud微服务(3) 实现负载均衡ribbon_第3张图片

项目结构

spring-cloud微服务(3) 实现负载均衡ribbon_第4张图片

1. application.properties配置

也是配置成一个eureka-client

server.port=8094
spring.application.name=service-ribbon
#eureka -client
eureka.instance.preferIpAddress=true
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka

2. 启动类

在启动类中,需要配置拦截逻辑LoadBalanced,以及轮询方式IRule。若不配置轮询方式,默认是随机轮询。
启动类代码:

@SpringBootApplication
@EnableEurekaClient
public class RibbonServerStart {
    public static void main(String[] args) {
        SpringApplication.run(RibbonServerStart.class, args);
    }

    @Bean
    @LoadBalanced//添加ribbon的拦截逻辑,否则无法实现服务调用
    public RestTemplate initRestTemplate(){
        return new RestTemplate();
    }

    @Bean
    public IRule initRule(){
        return new RandomRule();  //随机
        //return new RoundRobinRule();  //轮询(默认)

        //响应时间权重.会根据后端访问的实例的响应时间,动态调整权重值.
        //响应时间越长,性能越低,权重值越低
        //return new WeightedResponseTimeRule();
    }
}

3. 配置控制层和服务层逻辑

控制层:

@RestController
public class RibbonController {

    @Autowired
    private RibbonServer rs;

    @RequestMapping("ribbon/getName")
    public String printInfo(String name) {
        return "Ribbon:" +rs.printInfo(name);
    }
}

在服务层中,通过RestTemplate,将请求发送到指定的服务service-hi的指定接口/client/name,参数和接口与目标客户端保持一致,返回数据。

@Service
public class RibbonServer {

    @Autowired
    private RestTemplate temple;

    public String printInfo(String name) {
        String url = "http://service-hi/client/name?name=" + name;
        String body =temple.getForObject(url, String.class);
        return body;
    }
}

4. pom配置

<dependencies>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-eurekaartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-ribbonartifactId>
        dependency>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.11version>
            <scope>testscope>
        dependency>
    dependencies>

工程的启动

需要启动ribbon, erueka-server, erueka-client(8091和8092端口)。
8091和8092只是一套代码,只是启动了两次,设置不同的端口号而已。
spring-cloud微服务(3) 实现负载均衡ribbon_第5张图片

你可能感兴趣的:(spirng-cloud,ribbon)