Spring Cloud(三)关于 Ribbon 的学习

Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 Netflix Ribbon 实现,通过 Spring Cloud 的封装,可以让我们轻松地将面向服务的 REST 模板请求自动转换成客户端负载均衡的服务调用

0. 创建项目(在原来的项目基础上进行创建)

填写  ? 的项目描述信息 

 

根据 ? 的选择对应的可选项 

 

 

 

 

创建成功的项目  ?

 

 1. 项目配置

修改 resources 目录下的 application.properties 为 application.yml 通过 alt + shift + r 快捷键进行修改

然后填写 ? 的内容

server:
  port: 8040

spring:
  application:
    name: ribbon

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true

 

修改 mr.s.ribbon 包下的 SpringRibbonApplication 启动类,具体内容如 ?

package mr.s.ribbon;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class SpringRibbonApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringRibbonApplication.class, args);
    }

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

 2. 代码编写

  • 实体类编写  在 mr.s.ribbon 包下创建 entity 包,并创建 Student 实体类

内容 ?

package mr.s.ribbon.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private long id;
    private String name;
    private int age;
}
  • 控制器 handler 编写,在 mr.s.ribbon 下创建 controller 包,并创建 RibbonHandler 控制器类

内容 ?

package mr.s.ribbon.controller;

import mr.s.ribbon.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.Collection;

@RestController
@RequestMapping("/ribbon")
public class RibbonHandler {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/findAll")
    public Collection<Student> findAll(){
        return restTemplate.getForObject("http://provider/student/findAll",Collection.class);
    }
    @GetMapping("/index")
    public String index(){
        return restTemplate.getForObject("http://provider/student/index",String.class);
    }

}

为了更好的看出负载均衡的效果,我们要将之前写的 spring-provider 项目进行改写

在 spring-provider 的 StudentHandler 里面加上

再复制一份 SpringProviderApplication 启动类 重新命名为 SpringProviderApplication2

3. 效果展示

先将 spring-server 注册中心开启, 然后分别修改 spring-provider 的 application.yml 中配置的端口号,一个修改为 8777 一个修改为 8888 ,然后启动者两个服务提供者,最后启动本项目

先访问 http://localhost:8761/ 注册中心

看到 ? 的信息,证明项目启动成功

现在访问 http://localhost:8040/ribbon/findAll ?

 

成功获取到了服务提供者的信息! 

现在验证 Ribbon 的负载均衡,访问 http://localhost:8040/index

然后按 F5 刷新页面

 

发现同样的连接,却出现了两个不同的结果,这是因为 Ribbon 的负载均衡作用,分别以轮询的方式去调用服务提供者 spring-provider 启动的两个服务

ok,本篇就到这里了,谢谢浏览! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值