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

概述

访问指定服务,实现负载均衡,即访问相同服务名提供者,不同客户端提供的不同端口,可以设置轮询/随机/权重。
不同客户端之前的访问,也是要通过负载均衡来完成。
在这里插入图片描述

效果图

注册中心,注册了3个客户端,ribbon和两个erueka-client
在这里插入图片描述
访问ribbon的网址,ribbon会访问指定服务端名,调用集群,反复刷新页面,会看到8092或者8091的端口号被调用。
在这里插入图片描述

项目结构

在这里插入图片描述

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>
        <!--eureka-client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <!--ribbon-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

工程的启动

需要启动ribbon, erueka-server, erueka-client(8091和8092端口)。
8091和8092只是一套代码,只是启动了两次,设置不同的端口号而已。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值